首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存去分配

内存去分配
EN

Stack Overflow用户
提问于 2011-07-27 15:13:02
回答 3查看 196关注 0票数 3

可能重复:

How does delete[] “know” the size of the operand array?

在以下示例代码中:

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

它如何知道要删除多少元素?

我听说这个信息存储在已经分配的表开始之前或者其他地方的一种标题中,但是在这种情况下,为什么我们不能使用一个函数来访问这个值,比如返回10的大小(P)?有什么特别的原因吗?这些标头中还存储了哪些其他信息?这是操作系统特有的吗?编译器专用的?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-27 15:16:46

它是完全不指定的,不同的实现方式也不同。通常,如果类型没有析构函数,则信息甚至不可用。

请注意,幕后管理的信息有两种:分配了多少内存;有多少元素需要调用析构函数。如果不存在析构函数,则只需要第一个析构函数,并且在第一个和元素数量之间不一定存在一对一的映射:例如,在许多系统上,对齐约束意味着new char[1]new char[2]将分配相同数量的内存。

票数 4
EN

Stack Overflow用户

发布于 2011-07-27 15:15:05

分配器保存的簿记信息绝对是编译器和分配器特有的。C++允许您将内置的分配器替换为您自己的,无论是全局的还是每类的。没有标准的API来“窥视”这些信息。

票数 4
EN

Stack Overflow用户

发布于 2011-07-27 15:24:17

这是一个几乎重复的this question问题

这是如何实现的细节将是编译器特定的。

至于最后一点,为什么我们不能要求大小(P)-我想分配器只存储内存量,而不是数组类型的细节。与C的sizeof()相同。对于所示的示例,它不会返回10个字节,但是需要多少字节才能在平台上存储10个标准ints。

希望这能有所帮助。

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

https://stackoverflow.com/questions/6846738

复制
相关文章

相似问题

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