我想知道在动态创建2d数组时分配了多少大小
假设我在c++中动态创建一个一维数组,结果如下所示
int* p = new int[10];这意味着堆内存中有40字节,栈内存中有8字节(根据我的编译器),但我很困惑,如果我将2d数组设为(对于10*10 2d数组),将分配多少内存
int** p = new int*[10];
for(int i = 0; i < 10; i++) {
p[i] = new int[10];
}我的堆栈和堆中将分配多少内存,它在堆栈中是80字节,在堆中是400字节或其他什么
发布于 2019-01-22 23:25:24
你有一个指针类型的自动变量(不包括循环变量)。因此,您使用了8字节的堆栈(在您的系统上)。
动态分配一个由10个指针组成的数组,从而在堆上分配80个字节。然后分配10个数组,每个数组包含10个整数,因此堆上又多了400个字节,堆上总共有480个字节。
请注意,每个单独的动态分配必须与alignof(std::max_align_t)对齐,因此可能需要为每个分配填充最多alignof(std::max_align_t) - 1字节。分配器本身将使用一些内存用于内部表示,以允许以任意顺序有效地释放内存。自动变量可能需要填充到alignof(int**) - 1。
https://stackoverflow.com/questions/54311242
复制相似问题