ホームページ > バックエンド開発 > C++ > C コンパイラは「new」を使用してヒープ メモリ割り当てを最適化できますか?

C コンパイラは「new」を使用してヒープ メモリ割り当てを最適化できますか?

Patricia Arquette
リリース: 2024-12-02 02:15:11
オリジナル
495 人が閲覧しました

Can C   Compilers Optimize Out Heap Memory Allocations Using `new`?

アウト ヒープ メモリ割り当ての最適化

C では、一般に new 演算子を使用してヒープにメモリを割り当てます。ただし、コンパイラがこれらのヒープ メモリ割り当てを最適化できるかどうかという問題が生じます。

最適化の引数

N3664: メモリ割り当ての明確化によると、コンパイラはメモリ周りの最適化を許可されています。割り当て。この最適化は、あたかも要件が満たされているかのように結果が現れる限り、実装は要件を無視できるという「as-if」ルールに基づいています。 new は例外をスローする可能性があるため、その観察可能な動作のために最適化できないと主張する人もいます。

反論: "As-If" ルール

しかし、最適化の支持者は、この場合にも「as-if」ルールが適用されます。彼らは、割り当てによって例外が発生しないことをコンパイラが判断できるため、新しい呼び出しを省略してもルールに違反しないと主張しています。さらに、コンパイラは、置換グローバル演算子 new が観察可能な動作に影響を与えないことを証明でき、最適化を実行できると主張されています。

バリエーションと例外

一方、ほとんどのコンパイラは最適化を行いません。新しい呼び出しには、いくつかの例外が存在します。たとえば、Clang は、後に C 14 の一部となる最適化を実装しました。ただし、new の非スロー バージョンが使用されている場合、または置換演算子 new が可能な場合、最適化は実行されない可能性があります。

結論

ヒープ メモリ割り当てを最適化するコンパイラの機能は、「as-if」ルールのさまざまな解釈を伴う複雑な問題です。一部の実装では特定の条件下でこのような最適化が許可されていますが、その他の実装では標準に厳密に従い、実行されません。

以上がC コンパイラは「new」を使用してヒープ メモリ割り当てを最適化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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