首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建一个2d数组使用了多少大小

动态创建一个2d数组使用了多少大小
EN

Stack Overflow用户
提问于 2019-01-22 23:13:53
回答 1查看 161关注 0票数 4

我想知道在动态创建2d数组时分配了多少大小

假设我在c++中动态创建一个一维数组,结果如下所示

代码语言:javascript
复制
int* p = new int[10];

这意味着堆内存中有40字节,栈内存中有8字节(根据我的编译器),但我很困惑,如果我将2d数组设为(对于10*10 2d数组),将分配多少内存

代码语言:javascript
复制
int** p = new int*[10];
for(int i = 0; i < 10; i++) {
    p[i] = new int[10];
}

我的堆栈和堆中将分配多少内存,它在堆栈中是80字节,在堆中是400字节或其他什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54311242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档