2017-06-03 50 views
-2

在某些情況下,將一塊內存分配給一個變量所花費的時間太多,並且出於優化原因必須儘可能地減少。這種情況最常發生在必須進行許多同一方法的迭代時,每次迭代都會分配和釋放內存。讓我舉個例子來說:編譯器可以優化嵌套循環嗎?

while(something){ 
    int i = 4; 
    int b =i*100; 
    //... 
} 

不要在這種情況下,編譯器循環之前進入循環彷彿變量聲明之前分配內存,或者他們編譯彙編代碼不執行這一步,基本上編譯東西「像你寫的那樣糟糕「? 此外,嵌套循環呢?

回答

1

在這種特殊情況下,編譯器可能根本不會分配任何內存,並將400視爲一個常量,具體取決於循環體的其餘部分,取決於您使用的編譯器優化選項。您應該構造一個簡單的可運行示例,嘗試一些優化標誌並分析編譯器生成的彙編代碼。

你也可以看看GCC's optimisation options。例如,標記如-fgcse-lm-fgcse-sm可以啓用您所描述的某些行爲。