我使用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中分配的相同内存。有没有办法知道变量在内存中占用的确切空间?
答案 0 :(得分:1)
实际上你不只分配1600个八位位组,但你也分配了指针:
64位:
使用C和valgrind,我有1840个八位字节和31个块。
其余的可能是一些C ++例程。