c++ - 动态分配二维数组时,为什么内存中每行有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
解决方案
您所做的是创建一个锯齿状数组,其中不需要连续分配子数组。
你只需得到内存分配器给你的东西。
推荐阅读
- python - 如何修复错误 NameError:名称“questions_test”未在基本多项选择测验程序中定义
- angular - 实现自定义可观察类型的延迟
- python-3.x - 带有 Tensorflow 的 Apache Arrow:类型错误:箭头类型不匹配:预期 dtype=2,但得到 dtype=9
- ios - 如何将 Swift 字典写入 Firestore 地图/字典?
- node.js - MERN Stack 为所有用户显示相同的数据
- android - React Native Android:弹跳滚动视图
- c# - 如果没有记录,如何避免 .Average 在 LINQ 表达式中引发异常?
- r - 如何在 R 的数据框中的数据子集之间进行 t 检验?
- python - 通过从 excel 读取数据来观察 Python 代码上的值错误
- angular - 使用角度离子设置单选按钮值布尔值