繁体   English   中英

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

[英]Malloc seemingly using less memory than new[]

可能有任何原因导致:

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:

一个new表达式将请求的空间量作为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)`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM