当动态分配2D数组时,为什么内存中的每一行都有12byte的间隙

问题描述 投票:0回答:3

如上所述,当我动态分配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

c++ arrays
3个回答
1
投票

如上所述,您之后将分配3个不同的1-D数组的引用(至ppa [i])。但是,可以为这些一维数组分配内存中的任何内存地址(没有特定的12字节间隔模式)。唯一可以确保的是,这些1-D数组3个内部的元素将是连续的。

注意:-如果创建数组,例如“ int ppa [3] [5]”,则所有元素将是连续的。


3
投票

您要做的是创建一个jagged array,其中不要求必须连续分配子数组。

您只需获得内存分配器给您的内容。


0
投票

可能有关分配块的一些内部信息存储在这里。

© www.soinside.com 2019 - 2024. All rights reserved.