首页 > 解决方案 > 动态分配二维数组时,为什么内存中每行有12字节的间隙

问题描述

如上所述,当我动态分配二维数组时,每行总是有 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

我的测试环境

操作系统:OSX 64位系统

IDE:Xcode

标签: c++arrays

解决方案


您所做的是创建一个锯齿状数组,其中不需要连续分配子数组。

你只需得到内存分配器给你的东西。


推荐阅读