代碼1:
i=0;
while(1)
{
for(i=0;i<25;i++)
{
a=1;
}
for(;i<50;i++)
{
a=0;
}
i=0;
}
代碼2:
i=0;
while(1)
{
i++;
switch(i)
{
case 1:
a=1;
break;
case 25:
a=0;
break;
case 50:
i=0;
break;
}
}
回復chezunyin: 不好說,不同的處理器執行不同的指令花費的時間不同,這是其一,其二,遇到for循環,編譯器會翻譯成一個條件判斷和一個跳轉,switch也是如此。
現代處理器用硬件預測這個if是否成立,並且先行執行後續指令。如果if執行出來和預測的不同,然後再走另一個分支。
因此對於現代處理器來說,很難通過靜態代碼評判它的效率。
通常我們可以反匯編編譯器產生的代碼,根據產生的指令條數大概估測,這個你可以自己去看。
總之,你在學校學習的是那種沒有緩存機制,也沒有超標量多發射,更沒有分支預測的8086,它完全和你用的處理器不是一碼事了。