可能重复:
How does delete[] “know” the size of the operand array?
在以下示例代码中:
int* p = new int[10];
delete[] p;它如何知道要删除多少元素?
我听说这个信息存储在已经分配的表开始之前或者其他地方的一种标题中,但是在这种情况下,为什么我们不能使用一个函数来访问这个值,比如返回10的大小(P)?有什么特别的原因吗?这些标头中还存储了哪些其他信息?这是操作系统特有的吗?编译器专用的?
谢谢
发布于 2011-07-27 15:16:46
它是完全不指定的,不同的实现方式也不同。通常,如果类型没有析构函数,则信息甚至不可用。
请注意,幕后管理的信息有两种:分配了多少内存;有多少元素需要调用析构函数。如果不存在析构函数,则只需要第一个析构函数,并且在第一个和元素数量之间不一定存在一对一的映射:例如,在许多系统上,对齐约束意味着new char[1]和new char[2]将分配相同数量的内存。
发布于 2011-07-27 15:15:05
分配器保存的簿记信息绝对是编译器和分配器特有的。C++允许您将内置的分配器替换为您自己的,无论是全局的还是每类的。没有标准的API来“窥视”这些信息。
发布于 2011-07-27 15:24:17
这是一个几乎重复的this question问题
这是如何实现的细节将是编译器特定的。
至于最后一点,为什么我们不能要求大小(P)-我想分配器只存储内存量,而不是数组类型的细节。与C的sizeof()相同。对于所示的示例,它不会返回10个字节,但是需要多少字节才能在平台上存储10个标准ints。
希望这能有所帮助。
https://stackoverflow.com/questions/6846738
复制相似问题