首頁 >後端開發 >C++ >C 編譯器最佳化是否利用參數求值順序歧義?

C 編譯器最佳化是否利用參數求值順序歧義?

Linda Hamilton
Linda Hamilton原創
2024-12-14 01:54:13882瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn