ホームページ >バックエンド開発 >C++ >`delete[]` は割り当てを解除する配列のサイズをどのようにして知るのでしょうか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 00:18:10763ブラウズ

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

メモリ アロケータが Delete[] の配列サイズを知る方法

C では、 delete[] 演算子を使用して配列の割り当てを解除します。記憶からのオブジェクト。ただし、明示的に配列サイズを必要とする new[] 演算子とは異なり、delete[] はこの情報なしで動作するようです。配列のサイズはどのように決定されますか?

new[] を使用してヒープにメモリを割り当てると、メモリ アロケータは配列要素に連続したメモリ ブロックを割り当て、割り当てに関する追加情報を格納します。そのサイズ。この情報は通常、割り当てられたメモリの直前のヘッダーに格納されます。

標準化

割り当てられたメモリで配列サイズを格納する方法は、C 自体では標準化されていません。 。さまざまなメモリ アロケータがさまざまな手法を実装しています。

  • ヒープ メタデータ: 一部のアロケータは、メモリ内データ構造を使用して、配列サイズなどの割り当ての詳細を追跡します。このデータ構造はアロケータによって管理され、プログラムからは直接見えません。
  • メモリ ヘッダー: 前述したように、多くのアロケータは直前のヘッダーに配列サイズとその他の情報を格納します。割り当てられたメモリ。通常、このヘッダーには、実際のデータと区別するために一意のタグまたはフラグが接頭辞として付けられます。
  • 特別なポインター値: 一部のアロケーターは、配列ポインターで終了を示すために特別な値を使用する場合があります。配列の。たとえば、配列の割り当てが完全に解除されると、ポインタは null ポインタに設定される可能性があります。

配列サイズの取得

削除中に、delete[]関連するヘッダーまたはメモリ アロケータから配列サイズを取得します。サイズを知ることで、delete[] はオブジェクトの配列全体の割り当てを効率的に解除できます。

結論

要約すると、new[] によって割り当てられたメモリには、そのオブジェクトの配列に関する情報が含まれます。ヒープ メタデータ、メモリ ヘッダー、またはポインター値のいずれかを介してサイズを確認します。この情報は、delete[] 演算子によって割り当て解除時に配列サイズを決定するために使用され、サイズを明示的に指定しなくても効率的なメモリ管理が可能になります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。