簡體   English   中英

在以下C代碼中應優化哪個變量

[英]Which variable should be optimize in following C code

如果您的編譯器實際上優化了每個函數只有兩個寄存器變量的訪問時間,那么以下程序中哪兩個變量最適合用作寄存器變量?

void main(void)
{
  int i,j,k,m;
  do
  {
    printf("enter value");
    scanf(“%d”,&i);
    m=0;
    for(k=0;k<100;k++)
      m=k+m;
  }
  while(i>0);
}

如果有任何錯誤,請忽略...

技巧問題? 在智能編譯器中,沒有任何變量被注冊。 i已獲取地址,因此不能一直在寄存器中。 jkm應該被優化掉。

當然不是j ,因為它從未使用過。 i也不是,因為您正在使用address-of運算符對其進行寫入,這意味着在scanf寫入它之后,需要從內存中讀取它。 僅剩下km

好的編譯器將優化這部分代碼:

m=0;
for(k=0;k<100;k++)
  m=k+m;

並用m = 4950;代替m = 4950; :)更好的將優化m = 4950; 並沒有放置任何東西)。 j也將被優化。 而且i無法注冊,因為在scanf中需要其地址。 因此,最后的答案是“沒有人”。

我猜編譯器會選擇k和m

由於從未使用過計算結果,因此編譯器可以優化幾乎所有代碼。 唯一必須保留的等同於

int main(void) {
  int i;
  do {
    printf("enter value");
    scanf(“%d”,&i);
  } while(i>0);
  return 0;
}

正如其他人已經說過的那樣, i唯一剩下的變量不能是register存儲類,因為它的地址被占用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM