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:
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)`
相关文章:
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- constexpr new 如何分配内存?
- 这行代码中的内存是如何分配"int **v = new int*[n]; "的?
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 如何在不使用 "new" 关键字的情况下解除分配创建的对象的内存?
- 如何影响由 new 和强制转换为数组 od 类对象的内存?
- 哪些资源是由智能指针管理的,而它们的内存不是由new分配的
- 使用 'new[]' 运算符分配内存
- 如何使用 "new" 而不是 malloc 分配内存?
- C++ 使用 'new' 分配顺从内存分配
- 如何防止连续使用"new"时分配失败时内存泄漏
- 如何使用 new in C++ 分配字节数内存
- 为什么运算符 new[] 为数组的大小分配内存?
- 使用重载的 new 和 delete 运算符跟踪已用内存
- "new"不会将内存分配给作为类的数据成员的指针
- "new"会导致 Java 中的内存泄漏吗?
- 将内存分配给 2D 数组时,“new int*[rowCount];”的含义是什么?是 2D 数组,是指向数组的指针数组
- 使用放置 new 覆盖内存中的对象
- 无法访问使用运算符 new() 分配的内存
- 以下代码中的嵌入"new"是否会导致内存泄漏?