C では、一般に new 演算子を使用してヒープにメモリを割り当てます。ただし、コンパイラがこれらのヒープ メモリ割り当てを最適化できるかどうかという問題が生じます。
N3664: メモリ割り当ての明確化によると、コンパイラはメモリ周りの最適化を許可されています。割り当て。この最適化は、あたかも要件が満たされているかのように結果が現れる限り、実装は要件を無視できるという「as-if」ルールに基づいています。 new は例外をスローする可能性があるため、その観察可能な動作のために最適化できないと主張する人もいます。
しかし、最適化の支持者は、この場合にも「as-if」ルールが適用されます。彼らは、割り当てによって例外が発生しないことをコンパイラが判断できるため、新しい呼び出しを省略してもルールに違反しないと主張しています。さらに、コンパイラは、置換グローバル演算子 new が観察可能な動作に影響を与えないことを証明でき、最適化を実行できると主張されています。
一方、ほとんどのコンパイラは最適化を行いません。新しい呼び出しには、いくつかの例外が存在します。たとえば、Clang は、後に C 14 の一部となる最適化を実装しました。ただし、new の非スロー バージョンが使用されている場合、または置換演算子 new が可能な場合、最適化は実行されない可能性があります。
ヒープ メモリ割り当てを最適化するコンパイラの機能は、「as-if」ルールのさまざまな解釈を伴う複雑な問題です。一部の実装では特定の条件下でこのような最適化が許可されていますが、その他の実装では標準に厳密に従い、実行されません。
以上がC コンパイラは「new」を使用してヒープ メモリ割り当てを最適化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。