0

是否有任何原因:

new X[n];

与以下相比会消耗更多内存:

X* x = reinterpret_cast<X*>(malloc(n * sizeof(X))
for(X* p = x; p != x + n; ++p)
    new (p) X();

对于多个 n 的多个副本?

我正在看到这方面的证据。

4

1 回答 1

5

当然:Array-new 允许分配比对象空间更多的内存,而且通常会这样做。当您说delete [] x;时,实现如何知道要调用多少个析构函数?

见 5.3.4/10:

new-expression将请求的空间量作为 type 的第一个参数传递给分配函数std::size_t。该参数不应小于正在创建的对象的大小;只有当对象是一个数组时,它才可能大于正在创建的对象的大小。

Itanium ABI专门针对数组 cookie 的使用

|<-- offset -->|
+--------------+----------+----------+---------+---------+
|(padding)  N  |   a[0]   |   a[1]   |   ...   |  a[N-1] |
+--------------+----------+----------+---------+---------+
^              ^
|              +---- T * a = new T[N]
|
+----  return value of `operator new(sizeof(T) * N + offset)`
于 2013-05-17T17:54:31.000 回答