valgrind中char的尺寸3尺寸阵列
sizeof 3 dimensional array of char in valgrind
我使用char ***块创建一个3维数组,用新的数组分配并将其初始化为'0':
block = new char**[x_size];
for(int i = 0; i < x_size; ++i)
{
block[i] = new char*[y_size];
for(int j = 0; j < y_size; ++j)
{
block[i][j] = new char[z_size];
for(int k = 0; k < z_size ;++k)
block[i][j][k] = '0';
}
}
此数组应包含1600个char(5*5*64)。考虑到char是1个字节,阵列不应该是1600字节吗?
在Valgrind中,我获得了75568个字节分配的和33个Allocs。这是在具有构造函数,攻击函数和私人的最小班级中完成的:
char ***block;
const int x_size = 5, y_size = 5, z_size = 64;
im使用char,因为我需要最好的性能,但是我尝试使用int,并在Valgrind中获得了相同的确切内存。有没有办法知道变量在内存中所占的确切空间?
实际上,您不仅分配1600八位位,但也是分配指针:
64位:
- 5 * 8 = 40
- 5 * 5 * 8 = 200
- 5 * 5 * 64 * 1 = 1600
使用C和Valgrind,我完全有1840 Octet和31块。
其余的可能是一些C 例程。
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- 从较小的阵列到较大的阵列的元素级转换
- 仅在大型阵列上出现合并排序分段错误
- 从阵列C++中删除重复项
- 阵列的大小在C++中是否灵活?
- 反转阵列中的正序列
- 具有可变尺寸的 C++ 2D 阵列
- 二维阵列的动态分配
- 重新增长阵列时出错:写入时缓冲区溢出