コンパイラはヒープ メモリ割り当てを削除できますか?
C では、ヒープにメモリを割り当てるために new 演算子が使用されます。コンパイラーは、不要なステートメントを削除するなど、コードを最適化する場合があります。コンパイラは new を使用して行われたヒープ メモリ割り当てを排除できますか?
コンパイラの動作
調査によると、コンパイラによってヒープ割り当ての処理方法が異なることがわかっています:
最適化の有効性
有効性コンパイラの最適化については議論の対象となっています。新しい呼び出しには観察可能な動作 (例外のスローなど) がある可能性があるため、コンパイラーは新しい呼び出しを最適化することはできないと主張する人もいます。観察可能な動作が影響を受けないことをコンパイラが保証できれば、新しい呼び出しの最適化は許可されると主張する人もいます。
C 14 Standard
N3664: メモリ割り当ての明確化により、コンパイラの最適化とメモリ割り当てに関するルール。これにより、コンパイラは特定のシナリオでメモリ割り当てを最適化できます。ただし、この規定は因果関係に違反する可能性があるため批判されています。
追加の考慮事項
結論
ヒープを最適化するコンパイラーの機能メモリ割り当ては、コンパイラの動作、言語標準、潜在的な例外が関係する複雑な問題です。一部のコンパイラは N3664 に基づいてこの最適化を実装していますが、その有効性は依然として議論の対象であり、C 標準やカスタム メモリ アロケータの存在などの特定の状況に依存します。
以上がコンパイラーは C の「new」呼び出しを最適化して取り除くことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。