我最近碰到一個情況,我寫了下面的代碼:C/C++編譯器優化條件語句多少錢?
for(int i = 0; i < (size - 1); i++)
{
// do whatever
}
// Assume 'size' will be constant during the duration of the for loop
當看着這個代碼,它讓我不知道究竟是如何在for循環的條件爲每個循環進行評估。具體來說,我很好奇編譯器是否會'優化'每個循環必須完成的任何附加算術。在我的情況下,這個代碼是否會被編譯,使得(size-1)必須爲每個循環迭代進行評估?或者,編譯器足夠聰明地認識到'size'變量不會改變,因此它可以爲每個循環迭代預先計算它。
然後,這讓我想到了一般情況下,你有一個條件語句,可能會指定比必要的更多的操作。
作爲一個例子,如何將以下兩件代碼的編譯:
if(6)
if(1+1+1+1+1+1)
int foo = 1;
if(foo + foo + foo + foo + foo + foo)
如何聰明的編譯器?上述3種情況會被轉換成相同的機器碼嗎?
雖然我在,但爲什麼不列舉另一個例子。如果你在一個條件下做了一個操作,對最終結果沒有任何影響,編譯器會做什麼?例如:
if(2*(val))
// Assume val is an int that can take on any value
在這個例子中,乘法是完全不必要的。儘管這個案例比我的原始案例看起來更加愚蠢,但問題仍然存在:編譯器是否能夠移除這種不必要的乘法?
問:
- 多少優化參與條件語句?
- 它根據編譯器有所不同嗎?
_多少優化_是不應答的。什麼期待?百分之? 50%優化?像「多」這樣的主觀術語? – Tas
@Tas來吧,這是一個懸而未決的問題。評論我列出的一些例子就足夠了。 – Izzo
告訴您的編譯器生成彙編語言列表。通常比較或條件語句是2個彙編語言語句:比較和分支。 –