1. 程式人生 > >Gcc 優化選項注意事項

Gcc 優化選項注意事項

Gcc -O0 不優化,-O1 -O2 -O3對程式碼進行了優化,減小目標檔案大小,減小程式碼段及棧空間的大小,同時也會帶來一些意想不到的問題,所以良好的程式設計風格和規範至關重要,避免型別直接來回轉換,進可能用小記憶體表示,而且不同平臺要求4或8位元組對齊。

如:

1、函式臨時變數為short a,而函式內部對a地址賦值一個32位的整數,則會覆蓋棧地址,導致程式崩潰。

2、部分指令暫存器要求地址16位元組對齊,程式碼中記憶體地址只有4位元組對齊才不會出錯,優化後程序都會調整為16位元組對齊,否則程式會崩潰。

3、部分變數強制轉換後作為入參傳人,則呼叫函式迴圈展開後出現數組越界等錯誤。

對部分程式碼可以去除優化:

#pragma GCC push_options
#pragma GCC optimize ("O0")

code

#pragma GCC pop_options