Malloc似乎比new[]使用更少的内存

Malloc seemingly using less memory than new[]

本文关键字:内存 new Malloc      更新时间:2023-10-16

有什么原因吗?

new X[n];

将比

消耗更多的内存:
X* x = reinterpret_cast<X*>(malloc(n * sizeof(X))
for(X* p = x; p != x + n; ++p)
    new (p) X();

对于多个n的多个拷贝?

我看到了证据

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

看到5.3.4/10:

A new-expression将请求的空间量作为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)`