valgrind中char的尺寸3尺寸阵列

sizeof 3 dimensional array of char in valgrind

本文关键字:3尺 阵列 char valgrind      更新时间:2023-10-16

我使用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位:

  1. 5 * 8 = 40
  2. 5 * 5 * 8 = 200
  3. 5 * 5 * 64 * 1 = 1600

使用C和Valgrind,我完全有1840 Octet和31块。

其余的可能是一些C 例程。