gcc的優化功能

2021-09-12 10:41:49 字數 1501 閱讀 9505

**優化的目的是改善程式的執行效能。gcc提供的**優化功能非常強大,它通過引數-on來控制優化**的生成,其中n為優化級別的整數,比較典型的範圍是從0變化到2或3(與版本有關)。

編譯時通過使用選項-o可以告訴gcc同時減小**的長度和執行時間,其效果等價於-o1,在這一級別上能夠進行的優化型別雖然取決於目標處理器,但一般都會包括執行緒跳轉和延遲退棧兩種優化。選項-o2除了完成所有-o1級別的優化外,同時還要進行一些額外的調整工作,如處理器指令排程等。選項o3除了完成所有-o2級別的優化外,還包括迴圈展開和其他一些與處理器特性相關的優化工作。數字越大優化的等級越高,程式的執行速度更快。一般採用-o2選項,因為它在優化長度、編譯時間和**大小之間取得了乙個比較理想的平衡點。

借助linuxtime命令,可以大致統計出該程式在執行時所需要的時間,注意此時最好退出其它程式。

[root@localhost work]# gcc -wall hello.c -o hello

[root@localhost work]# time ./hello

hello world!

real  0m0.011s

user 0m0.000s

sys   0m0.002s

//優化如下:

[root@localhost work]# gcc -wall -o hello.c -o hello

[root@localhost work]# time ./hello

[root@localhost work]# gcc -wall -o1 hello.c -o hello

[root@localhost work]# time ./hello

[root@localhost work]# gcc -wall -o2 hello.c -o hello

[root@localhost work]# time ./hello

[root@localhost work]# gcc -wall -o3 hello.c -o hello

[root@localhost work]# time ./hello

real:程序總的執行時間,它和系統負載有關(包括了程序排程,切換的時間)

user:被測量的程序中使用者指令的執行時間(cpu的執行,計算等)

sys:被測量的程序中核心代使用者指令執行的時間,user和sys的和被稱為cpu時間(系統呼叫消耗的時間)。

注意:儘管gcc的**優化功能很強大,但還是要求能夠手工編寫出高質量的**(很重要),如果自己編寫的**簡潔,邏輯性強,則編譯器就不會做更多的工作,甚至不需要進行優化。而且在一些場合中不允許對**進行優化:程式開發的時候,優化等級越高,消耗在編譯的時間上也就越長,因此開發的時候不建議對**進行優化,只有軟體開發結束的時候,才考慮對最終**進行優化。跟蹤除錯的時候,也不建議對**進行優化,因為優化可能會使某些**被刪除或改寫,或者重組,從而使跟蹤和除錯變得異常困難。

gcc 編譯優化選項

o0 這個等級 字母 o 後面跟個零 關閉所有優化選項,也是cflags或cxxflags中沒有設定 o等級時的預設等級。這樣就不會優化 這通常不是我們想要的。o1 這是最基本的優化等級。編譯器會在不花費太多編譯時間的同時試圖生成更快更小的 這些優化是非常基礎的,但一般這些任務肯定能順利完成。o2 ...

使用GCC編譯的常用功能

1 gcc對多個分立原始檔的編譯 c,o ls test.h test.c main.c gcc c test.c o test.o 生成中間檔案test.o gcc c main.c o main.o 生成中間檔案main.o gcc test.o main.o o main 生成最終的main可...

Linux下gcc 優化等級的介紹

優化可以說是乙個非常複雜而又非常重要的問題,以筆者多年的linux c開發經驗來說優化通常分為兩個方面,一是人為優化,也就是基於程式設計經驗採用更簡易的資料結構函式等來降低編譯器負擔,二是採用系統自帶的優化模式,也就是gcc o系列,下面我將簡述一下各級優化的過程以及實現。gcc o1 首先o1上面...