次の理由が考えられます。
new X[n];
次のものと比較して、より多くのメモリを消費します。
X* x = reinterpret_cast<X*>(malloc(n * sizeof(X))
for(X* p = x; p != x + n; ++p)
new (p) X();
複数の n の複数のコピーの場合?
私はこれの証拠を見ています。
次の理由が考えられます。
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-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)`