在valgrind中的sizeof 3维char数组

时间:2016-12-11 10:06:44

标签: c++ arrays

我使用char ***块创建一个三维数组,用new分配它并将其初始化为' 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个字符(5 * 5 * 64)。考虑到char是1个字节,该数组不应该是1600个字节吗? 在valgrind中,我得到了75568个字节的分配和33个allocs。这是在一个具有构造函数,析构函数和私有的最小类中完成的:

char ***block;
const int x_size = 5, y_size = 5, z_size = 64;

我使用char因为我需要最好的性能,但我尝试使用int并获得在valgrind中分配的相同内存。有没有办法知道变量在内存中占用的确切空间?

1 个答案:

答案 0 :(得分:1)

实际上你不只分配1600个八位位组,但你也分配了指针:

64位:

  1. 5 * 8 = 40
  2. 5 * 5 * 8 = 200
  3. 5 * 5 * 64 * 1 = 1600
  4. 使用C和valgrind,我有1840个八位字节和31个块。

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