天天看點

C/C++代碼優化方法優化概述_O0優化_O1優化_O2優化_O3優化volatile關鍵字避免優化

目錄

  • 優化概述
  • _O0優化
  • _O1優化
  • _O2優化
  • _O3優化
  • volatile關鍵字避免優化

優化概述

如果将未經優化的C語言程式直接運作會發現運作效率較低,并且産生的代碼較大,而通過優化可以較好地解決這些問題。

優化的作用是對循環進行化簡,重新組織表達式和聲明,将變量直接配置設定到寄存器中。

通過優化可以提高程式運作效率,縮小程式編碼數量。

C/C++編譯器提供了不同的優化選擇,通過修改cl55指令行中的-on選擇就可以友善地選擇不同的優化等級,n代表優化等級,包括0、1、2和3。下面給出不同優化等級的功能。

_O0優化

1、 簡化控制流圖

2、把變量配置設定到寄存器

3、分析循環的各種情況,隻保留一個退出循環的分支

4、删除未用的代碼

5、簡化表達式和聲明

6、把用inline聲明的函數變為調用關系

_O1優化

除了O0的各種優化功能外,還有如下功能:

1、在配置設定變量時,将數值直接賦給變量而不是給出變量的索引值

2、去掉沒有用的配置設定變量和表達式

3、去掉本地通用表達式

_O2優化

除了O1的各種優化功能外,還有如下功能:

1、完成循環優化

2、去掉全局通用的子表達式

3、去掉全局沒有用的配置設定變量和表達式

4、完成循環的化解

5、當隻用-O選項時優化器自動進行-O2優化

_O3優化

除了O2的各種優化功能外,還有如下功能:

1、去掉未調用的函數

2、簡化傳回值未使用的函數

3、将小函數進行内嵌調用

4、對被調用的函數聲明進行重新排序,以便被優化的調用方能夠找到該函數

5、完成檔案級優化

volatile關鍵字避免優化

優化器分析資料流時将盡量減少對記憶體的通路,如果這個資料必須從記憶體中得到,則該資料必須用volatile關鍵字定義,這樣可以使編譯器不對該變量進行優化。

例如聲明一個指針

當在循環中有如下語句時

優化器将隻在進入循環的初始化中進行一次記憶體讀,而在循環當中不在更新該變量的内容,如果該變量被中斷或其他程式改變,由于循環中的ctrl的值沒有更新,将會使程式不能按照正确的方式執行,這裡應當用如下方法聲明ctrl:

特别當該變量在中斷函數中被指派,而該變量在主函數的循環中被用到時,必須用volatile聲明該變量。

繼續閱讀