0

ある時点でヒープに割り当てられた配列を渡すとき、次のように呼び出します。

delete [] ptrName

コンパイラは、割り当てを解除する必要があるメモリの量をどのように記憶していますか?

環境:

さまざまな理由から、必要に応じて int32、int8 などの間でキャストして、ヒープ上のバイト配列へのポインターをスローするプログラムがいくつかあります。delete 呼び出しでメモリの割り当てを解除する必要がある場合、適切な量が確実に解放されるようにするために正確に何が行われますか?

ありがとう

4

2 に答える 2

1

コンパイラは、割り当てられたメモリ情報を持つオーバーヘッドのバイトを割り当て、が呼び出されたxときに削除する量を認識しています。delete []

§5.3.4新規

  • new T [5]は、演算子newの呼び出しになります。
  • new(2、f)T [5]は、演算子newの呼び出しになります。

ここで、xとyは、配列割り当てのオーバーヘッドを表す非負の未指定の値です。new-expressionの結果は、演算子new[]によって返される値からこの量だけオフセットされます。このオーバーヘッドは、ライブラリ関数演算子new [](std :: size_t、void *)およびその他の配置割り当てを参照するものを含むすべての配列new-expressionに適用される可能性があります

于 2013-01-31T11:21:26.110 に答える
0

それについて標準的なものは何もありません。コンパイラの開発者は、new によって割り当てられるメモリの量をどこかに書き込むことによって、解放する必要があるメモリの量をどこに格納するかを決定します。

于 2013-01-31T11:07:48.763 に答える