1. 程式人生 > >gcc/g++ -O 優化選項說明

gcc/g++ -O 優化選項說明

查查gcc手冊就知道了,每個編譯選項都控制著不同的優化選項 下面從網路上copy過來的,真要用到這些還是推薦查閱手冊 
-O設定一共有五種:-O0、-O1、-O2、-O3和-Os。 

除了-O0以外,每一個-O設定都會多啟用幾個選項,請查閱gcc手冊的優化選項章節,以便了解每個-O等級啟用了哪些選項及它們有何作用。 

讓我們來逐一考察各個優化等級: 

-O0:這個等級(字母“O”後面跟個零)關閉所有優化選項,也是CFLAGS或CXXFLAGS中沒有設定-O等級時的預設等級。這樣就不會優化程式碼,這通常不是我們想要的。
-O1:這是最基本的優化等級。編譯器會在不花費太多編譯時間的同時試圖生成更快更小的程式碼。這些優化是非常基礎的,但一般這些任務肯定能順利完成。 

-O2:-O1的進階。這是推薦的優化等級,除非你有特殊的需求。-O2會比-O1啟用多一些標記。設定了-O2後,編譯器會試圖提高程式碼效能而不會增大體積和大量佔用的編譯時間。
-O3:這是最高最危險的優化等級。用這個選項會延長編譯程式碼的時間,並且在使用gcc4.x的系統裡不應全域性啟用。自從3.x版本以來gcc的行為已經有了極大地改變。在3.x,-O3生成的程式碼也只是比-O2快一點點而已,而gcc4.x中還未必更快。用-O3來編譯所有的軟體包將產生更大體積更耗記憶體的二進位制檔案,大大增加編譯失敗的機會或不可預知的程式行為(包括錯誤)。這樣做將得不償失,記住過猶不及。在gcc 4.x.中使用-O3是不推薦的。

-Os:這個等級用來優化程式碼尺寸。其中啟用了-O2中不會增加磁碟空間佔用的程式碼生成選項。這對於磁碟空間極其緊張或者CPU快取較小的機器非常有用。但也可能產生些許問題,因此軟體樹中的大部分ebuild都過濾掉這個等級的優化。使用-Os是不推薦的

本人遇到的問題:已測試程式在intel的機器上編譯優化的時候設成 -o3,但是在在arm機器上的時候出現很奇怪的事情,就是有一個變數conf_fixed在經過一個for迴圈後,其值是改變的,但是在for迴圈結束後就變成了0,導致程式執行錯誤。將g++的優化選項設成-o0的時候就可以正常運行了。

相關推薦

gcc/g++ -O 優化選項說明

查查gcc手冊就知道了,每個編譯選項都控制著不同的優化選項 下面從網路上copy過來的,真要用到這些還是推薦查閱手冊 -O設定一共有五種:-O0、-O1、-O2、-O3和-Os。 除了-O0以外,每一個-O設定都會多啟用幾個選項,請查閱gcc手冊的優化選項章節,以便了解每個

gcc- -O 優化選項

查查gcc手冊就知道了,每個編譯選項都控制著不同的優化選項 下面從網路上copy過來的,真要用到這些還是推薦查閱手冊 -O設定一共有五種:-O0、-O1、-O2、-O3和-Os。 除了-O0以外,每一個-O設定都會多啟用幾個選項,請查閱gcc手冊的優化選項章節,以便了解

gcc -g -o -c分別是什麽意思

gcc linux-g為了調試用的 加個-g 是為了gdb 用,不然gdb用不到-o output_filename,確定輸出文件的名稱為output_filename,同時這個名稱不能和源文件同名。如果不給出這個選項,gcc就給出預設的可執行文件a.out。-E:僅執行編譯預處理; -S:將C代碼轉換為匯編

【轉】gcc/g++常用編譯選項和gdb常用除錯命令

  gcc/g++編譯器是我們寫編譯C/C++程式時離不開的編譯工具,而gdb又是除錯C/C++程式的利器,這一篇文章我們記錄一下它們的慣常用法。 gcc/g++常用編譯選項 選項 作

linux gcc g++編譯命令選項

編譯:  [[email protected] code]# g++-o test.o d.cpp out.cpp [[email protected] code]# ./test.o1231 [[email protected] code]#  編譯成靜態庫  [[email&

gcc/g++常用編譯選項

-x language filename  設定檔案所使用的語言,使字尾名無效,對以後的多個有效.也就是根據約定,C語言的字尾名稱是.c的,而C++的字尾名是.C或者.cpp,如果你很個   性,決定你的C程式碼檔案的字尾名是.pig 哈哈,那你就要用這個引數,這個引數對他後

gcc -g -o -c分別是什麼意思

gcc -g -o -c: 簡單說: -g 可執行程式包含除錯資訊 -o 指定輸出檔名 -c 只編譯不連結 1、-g為了除錯用的 ,加個-g 是為了gdb 用,不然gdb用不到 2

gcc優化選項解析

函數 sed forward 普通 函數參數 處理器 空間 style war 1 -fno-defer-pop 函數返回的時候,就立即將棧裏面放置的該函數的參數pop出來。這樣可以避免函數參數占用過多的棧空間。 2 -fforward-propagate ? 3 -ffp

GCC 優化選項 -O1 -O2 -O3 -OS 優先級,-FOMIT-FRAME-POINTER(O3的優化很小,只增加了幾條優化而已)

reorder you alias form when must deb off cif 四種編譯優化類型的解釋: `-O ‘ `-O1 ‘ Optimize. Optimizing compilation takes

GCC & G++編譯選項

gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。 g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。這時候命令換做gcc即可。其實是無關緊要的。 其實編譯器是根據gcc還是g++來確定是按照C標準還是C++標準編譯連結。

gcc -O0 -O1 -O2 -O3 四級優化選項及每級分別做什麼優化

今天看到了一篇文章,寫的挺好就將其轉載, Gcc 編譯優化簡介 gcc 提供了為了滿足使用者不同程度的的優化需要,提供了近百種優化選項,用來對{編譯時間,目標檔案長度,執行效率}這個三維模型進行不同的取捨和平衡。優化的方法不一而足,總體上將有以下幾類:1)精簡操作指令;

GCC -O 優化等級詳解

GCC提供選項控制程式碼的優化等級: 這些選項可以實現不同程度的優化。 沒有任何優化選項的話,編譯器時的目標是降低編譯成本,並使除錯產生預期的結果。語句是獨立的:如果你使程式停止在語句之間設定的斷點處,你可以改變任何變數的值或者改變程式計數器的值使程式執行任意函式中的語句

Gcc 優化選項注意事項

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

[Linux][2015-03-17] gcc/g++ 編譯選項

GCC的幾個常用選項                                gcc常用的編譯選項對程式碼的影響 建立時間:2001-12-21 文章屬性:原創 文章來源:http://xfocus.org/ 文章提交:alert7 (sztcww_at_sina.com) 測試環境 redhat 6

gcc -O0 -O1 -O2 -O3 四級優化選項及每級分別做什麼優化

Gcc 編譯優化簡介gcc 提供了為了滿足使用者不同程度的的優化需要,提供了近百種優化選項,用來對{編譯時間,目標檔案長度,執行效率}這個三維模型進行不同的取捨和平衡。優化的方法不一而足,總體上

GCC優化選項的各種含義以及潛藏風險

在研究編譯驅動的makefile的時候,發現GCC的命令列裡面有一個-Os的優化選項。     遍查GCC文件,發現了-O0, -O1, -O2, -O3,就是沒有發現-Os。     祭出GOOGLE大法搜了一下,終於發現這篇文章說明了-Os的作用: http://www.linuxjournal.com

gcc 優化選項 -O1 -O2 -O3 -Os 優先順序,-fomit-frame-pointer .

少優化->多優化:O0 -->> O1 -->> O2 -->> O3-O0表示沒有優化,-O1為預設值,-O3優化級別最高英文解析:`-O ' `-O1 '                 Optimize.      Optimi

GCC優化選項:一般的文件裡不容易找到的-Os

在研究編譯驅動的makefile的時候,發現GCC的命令列裡面有一個-Os的優化選項。    遍查GCC文件,發現了-O0, -O1, -O2, -O3,就是沒有發現-Os。    祭出GOOGLE大法搜了一下,終於發現這篇文章說明了-Os的作用:http://www.lin

折騰gcc/g++連結時.o檔案及庫的順序問題

先看看與動態庫連結相關的幾個選項的man說明: --as-needed --no-as-needed This option affects ELF DT_NEEDED tags for dynamic libraries mentioned on the command line after th

gcc 優化選項 -O1 -O2 -O3 -Os 優先順序,-fomit-frame-pointer

少優化->多優化: O0 -->> O1 -->> O2 -->> O3 -O0表示沒有優化,-O1為預設值,-O3優化級別最高 英文解析: `-O ' `-O1 '                 Optimize.      O