`delete[]` は削除する配列のサイズをどのようにして知るのでしょうか?

Barbara Streisand
リリース: 2024-11-17 09:07:03
オリジナル
748 人が閲覧しました

How Does `delete[]` Know the Size of the Array It's Deleting?

Delete[] と配列検出

C では、 delete[] は、 new[] を使用して割り当てられた配列を削除するために使用されます。しかし、システムはポインタが配列を指していることをどのようにして知るのでしょうか?

コンパイラとオペレーティング システム

元の質問では、言語またはコンパイラが認識していないことを示唆しています。ポインタのタイプに応じて、実際はさらに微妙になります。コンパイラは、ポインタが配列なのか単一要素ポインタなのかを知りません。ただし、オペレーティング システム (OS) は、new で行われた割り当ての種類を追跡できます。

メモリ管理

new[] を使用して配列が割り当てられると、メモリは配列要素だけでなく、配列サイズを含むメタデータにも割り当てられます。このメタデータは、配列要素の前のヘッダーに保存されます。 delete[] が使用されると、OS はこのヘッダーをチェックして配列のサイズを決定します。

単一要素と配列

単一要素が割り当てられる場合new (int* num = new int(1); など) を使用すると、メタデータは追加されません。したがって、deleteForMe(num); の場合、が呼び出されると、OS は 1 つの int のみを削除します。

以上が`delete[]` は削除する配列のサイズをどのようにして知るのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート