2014-03-06 61 views
-3

如果我有這樣的代碼爲什麼編譯器不能刪除無用循環?

int main() { 
    int i, j, k; 
    int sum = 1; 

    for (i = 0; i < SIZE; i++) { 
     for (j = 0; j < SIZE; j++) { 
      for (k = 0; k < SIZE; k++) { 
       sum = -sum; 
      } 
     } 
    } 

    printf("hello, world\n"); 

    return 0; 
} 

的優化代碼仍然似乎是通過環路走了。爲什麼編譯只是刪除它,因爲它不影響打印或返回語句?

+7

與您編譯哪些選項編譯去除呢? – bolov

+0

...哪個C編譯器? –

+3

也可以問:爲什麼它會刪除循環?優化器的主要工作是使代碼快速運行,而不是執行困難的依賴性檢查並將其刪除。也請發佈可編譯代碼。什麼是「尺寸」? – stijn

回答

1

看來GCC不只要我指定-02

gcc -Wall -O2 

我以前只是(不優化)

gcc -Wall 
+4

,編譯器幾乎不執行優化。 – bolov

+7

所以你編譯沒有優化,然後問爲什麼沒有優化? ... – Lundin

+0

沒有意識到沒有優化是默認完成的。在你意識到這個問題後,這個問題似乎有點愚蠢。 – Aman