ホームページ >バックエンド開発 >C++ >配列の新しい配置は C で本当に移植可能ですか?

配列の新しい配置は C で本当に移植可能ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 04:05:02623ブラウズ

Is Placement New for Arrays Truly Portable in C  ?

配列の新しい配置: 移植性に関する懸念

C では、配置 new により、指定されたアドレスでのメモリ割り当てが可能になります。ただし、配列に使用すると移植性に課題が生じます。この記事では、この問題を調査し、移植可能な解決策を紹介します。

new[] によって返されるポインタは、指定されたアドレスと一致すると想定されることがよくあります。ただし、C 標準 (5.3.4、注 12) は、これが当てはまらない可能性があることを示しています。これは、placement new を使用して配列にバッファを割り当てようとするときに問題を引き起こします。

次のコードは、この問題を示しています。

メモリを調査すると、一部のコンパイラ (例: Visual Studio) 内部の簿記 (配列要素の数など) のために配列の前に追加のバイトを割り当てます。これはヒープの破損につながる可能性があります。

疑問が生じます: さまざまなコンパイラの配列の new 配置に関連するオーバーヘッドを判断できるでしょうか?目標は、移植可能なソリューションを見つけることです。

提案されたソリューション

配列全体に new 配置を使用するのではなく、考えられる回避策は、各配列要素を個別に割り当てることです。

このメソッドは、配列内の各オブジェクトの配置を明示的に制御し、破棄が正しく実行されることを保証します。

結論

配置の使用配列の new では、コンパイラ固有のオーバーヘッドを慎重に考慮する必要があります。提案されたソリューションは、配列要素を個別に割り当てて破棄することにより、移植可能な代替手段を提供します。

以上が配列の新しい配置は C で本当に移植可能ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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