Delete[] と配列検出
C では、 delete[] は、 new[] を使用して割り当てられた配列を削除するために使用されます。しかし、システムはポインタが配列を指していることをどのようにして知るのでしょうか?
コンパイラとオペレーティング システム
元の質問では、言語またはコンパイラが認識していないことを示唆しています。ポインタのタイプに応じて、実際はさらに微妙になります。コンパイラは、ポインタが配列なのか単一要素ポインタなのかを知りません。ただし、オペレーティング システム (OS) は、new で行われた割り当ての種類を追跡できます。
メモリ管理
new[] を使用して配列が割り当てられると、メモリは配列要素だけでなく、配列サイズを含むメタデータにも割り当てられます。このメタデータは、配列要素の前のヘッダーに保存されます。 delete[] が使用されると、OS はこのヘッダーをチェックして配列のサイズを決定します。
単一要素と配列
単一要素が割り当てられる場合new (int* num = new int(1); など) を使用すると、メタデータは追加されません。したがって、deleteForMe(num); の場合、が呼び出されると、OS は 1 つの int のみを削除します。
以上が`delete[]` は削除する配列のサイズをどのようにして知るのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。