如上所述,当我动态分配2维数组时,每行总有12字节的间隙。
在该代码中,我期望ppa [1]为0x1005626e4。但是结果是0x1005626f0。我知道动态分配可能不会在连续空间中分配。但是总是至少有12个字节的间隙。(实际上有时每行分配在不同的空间中)
我知道在堆中分配时,需要一些空间来存储信息。例如大小,类型..是12字节的原因吗?如果有人知道12字节的真正原因,请告诉我。
int** ppa;
ppa = new int*[3];
for (int i = 0; i < 3; ++i) {
ppa[i] = new int[5];
cout << "ppa[" << i << "]: " << ppa[i] << endl;
for (int j = 0; j < 5; ++j) {
cout << "&ppa[" << i << "][" << j << "]: " << &ppa[i][j] << endl;
}
cout << endl;
}
ppa[0]: 0x1005626d0
&ppa[0][0]: 0x1005626d0
&ppa[0][1]: 0x1005626d4
&ppa[0][2]: 0x1005626d8
&ppa[0][3]: 0x1005626dc
&ppa[0][4]: 0x1005626e0
ppa[1]: 0x1005626f0
&ppa[1][0]: 0x1005626f0
&ppa[1][1]: 0x1005626f4
&ppa[1][2]: 0x1005626f8
&ppa[1][3]: 0x1005626fc
&ppa[1][4]: 0x100562700
ppa[2]: 0x100562710
&ppa[2][0]: 0x100562710
&ppa[2][1]: 0x100562714
&ppa[2][2]: 0x100562718
&ppa[2][3]: 0x10056271c
&ppa[2][4]: 0x100562720
OS:OSX 64位系统
IDE:Xcode
如上所述,您之后将分配3个不同的1-D数组的引用(至ppa [i])。但是,可以为这些一维数组分配内存中的任何内存地址(没有特定的12字节间隔模式)。唯一可以确保的是,这些1-D数组3个内部的元素将是连续的。
注意:-如果创建数组,例如“ int ppa [3] [5]”,则所有元素将是连续的。
您要做的是创建一个jagged array,其中不要求必须连续分配子数组。
您只需获得内存分配器给您的内容。
可能有关分配块的一些内部信息存储在这里。