ホームページ > バックエンド開発 > C++ > C コンパイラの最適化は引数の評価順序の曖昧さを悪用しますか?

C コンパイラの最適化は引数の評価順序の曖昧さを悪用しますか?

Linda Hamilton
リリース: 2024-12-14 01:54:13
オリジナル
883 人が閲覧しました

Does C   Compiler Optimization Exploit Argument Evaluation Order Ambiguity?

C における引数評価順序のコンパイラの最適化

C 標準では、コンパイラが関数の引数の評価順序を独自の裁量で選択することが許可されています。このため、実際の実装ではこの曖昧さを利用してパフォーマンスを向上させることができるかどうかという疑問が生じます。

ほとんどの場合、コンパイラは引数の評価順序を最適化しません。ただし、アーキテクチャ、呼び出し規約、引数の型が動作に影響を与える可能性があります。 x86 マシンでは、Pascal 呼び出し規約は引数を左から右に評価しますが、C 規約 (__cdecl) は右から左に評価します。プラットフォームに依存しないプログラムは通常、予期せぬ事態を避けるために呼び出し規則を考慮します。

たとえば、従来のコード スニペットでは次のようになります。

int i = 0;
foo(i++, i++);
ログイン後にコピー

コンパイラーは Pascal 呼び出し規則で i の前に i を評価することがありますが、 __cdecl では逆のことが起こる可能性があります。それにもかかわらず、結果は未定義であり、特定の評価順序に依存することはお勧めできません。

言語標準では引数の評価順序が「未指定」として分類されていることに注意してください。これは、引数の評価順序が明示的に定義されていない、または禁止されていないことを意味します。これにより、実装に依存した動作が可能になり、抽象マシンの非決定性の性質が強調されます。

以上がC コンパイラの最適化は引数の評価順序の曖昧さを悪用しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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