向量的内存位置不连续

Memory Locations of Vectors not Continuous

本文关键字:不连续 位置 内存 向量      更新时间:2023-10-16

我在 Kubuntu 20.04 上使用 C++ 并运行了以下代码段:

vector<int> v(10,2);
cout<<sizeof(int)<<"n";
for (int i = 0; i < 10; ++i)
cout<<&(v[i])<<"n";

输出为:

4
0x55967f666f10
0x55967f666f14
0x55967f666f18
0x55967f666f1c
0x55967f666f20
0x55967f666f24
0x55967f666f28
0x55967f666f2c
0x55967f666f30
0x55967f666f34

如果向量将数据按顺序存储在内存中(如上面的块大小 4 字节(,那么为什么在">0x55967f666f18"之后是">0x55967f666f1c"而不是">0x55967f666f22"?

您正在考虑十进制(以 10 为基数(的数字系统,但指针以十六进制系统(以 16 为基数(打印。十六进制是计算中非常重要的系统。

在十六进制中,您有数字:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

地址正确且连续。如果您想在 Base 10 中查看它们,请使用如下转换器:https://www.binaryhexconverter.com/hex-to-decimal-converter

十进制的两个地址是:


94104870874904 94104870874908