delete[] 配列と他のポインターはどのように区別されますか?
C では、 delete[] 演算子は配列に割り当てられたメモリの割り当てを解除しますが、ポインターが配列であるかどうかはどのようにしてわかりますか?
コンパイラー考慮事項
指定したコードに不確実性があるにもかかわらず、コンパイラーはポインターが配列を指しているのか単一の要素を指しているのかを判断できません。
管理対象配列情報
動的に割り当てられた配列には、最初の要素へのポインターを超える追加情報が格納されます。この情報には、配列内の要素の数が含まれます。
Delete[] 操作
配列ポインターで delete[] が使用される場合、追加情報を使用して:
代替の「削除」構文
ランタイム ライブラリがすでに配列サイズ情報を管理しているため、別の delete[] 構文の必要性を疑問視する人もいます。 。ただし、C の元の設計原則は、非配列メモリ ブロックへの追加スペースの割り当てを回避することで、非配列ユーザーのオーバーヘッドを最小限に抑えることを目指していました。
したがって、delete[] を使用して、割り当てられたメモリが配列であることをランタイム ライブラリに明示的に通知し、メモリの割り当てを正しく解除できるようにします。これは現代のコンピューティングでは過剰に見えるかもしれませんが、メモリの最適化が重要なシナリオでは依然として有益です。以上がポインタを扱うとき、`delete[]` はどのようにして配列のサイズを知るのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。