ポインタを扱うとき、`delete[]` はどのようにして配列のサイズを知るのでしょうか?

DDD
リリース: 2024-11-17 22:25:02
オリジナル
692 人が閲覧しました

How Does `delete[]` Know the Size of an Array When Dealing with Pointers?

delete[] 配列と他のポインターはどのように区別されますか?

C では、 delete[] 演算子は配列に割り当てられたメモリの割り当てを解除しますが、ポインターが配列であるかどうかはどのようにしてわかりますか?

コンパイラー考慮事項

指定したコードに不確実性があるにもかかわらず、コンパイラーはポインターが配列を指しているのか単一の要素を指しているのかを判断できません。

管理対象配列情報

動的に割り当てられた配列には、最初の要素へのポインターを超える追加情報が格納されます。この情報には、配列内の要素の数が含まれます。

Delete[] 操作

配列ポインターで delete[] が使用される場合、追加情報を使用して:

  • 割り当てが配列であることを識別します。
  • 適切な番号の割り当てを解除します。

代替の「削除」構文

ランタイム ライブラリがすでに配列サイズ情報を管理しているため、別の delete[] 構文の必要性を疑問視する人もいます。 。ただし、C の元の設計原則は、非配列メモリ ブロックへの追加スペースの割り当てを回避することで、非配列ユーザーのオーバーヘッドを最小限に抑えることを目指していました。

したがって、delete[] を使用して、割り当てられたメモリが配列であることをランタイム ライブラリに明示的に通知し、メモリの割り当てを正しく解除できるようにします。これは現代のコンピューティングでは過剰に見えるかもしれませんが、メモリの最適化が重要なシナリオでは依然として有益です。

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

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