編譯選項o2
❶ 什麼叫 -O2編譯
【-O2編譯】編譯器提供-O選項,供程序優化使用。其中:
1、-O0表示沒有優化;
2、-O1為預設值,提供基礎級別的優化;
3、-O2 提供更加高級的代碼優化,會佔用更長的編譯時間;
4、-O3 提供最高級的代碼優化。
【編譯器】就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執行程序 (executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、java、漢語編程等或匯編語言,而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
❷ visual C++ 的優化選項分別都是什麼意思
Od:編譯器不做優化,通常debug的使用這個編譯選項
O1:代碼最小,使用這個選項編譯出來的二進制文件是最小的,但是可能會犧牲一些執行效率
O2:編譯出來的代碼執行速度最快,但是大小會比O1大(release默認)
Ox:對程序進行最大優化,可能會犧牲一些兼容性問題等,對執行速度和二進制文件大小都盡可能優化
❸ makefile裡面gcc-O2-o$lt;是什麼意思
-O2表示優化選項,2表示最優優化,即編譯器會優化你的程序;-o表示後邊接的是文件名稱;$@是Makefile的通配符,代指你前面指定的文件名,例如有規則%.o:%.c,那麼$@表示xxx.o文件(xxx是你的源代碼文件的名稱前綴);$<表示搜索到的第一個匹配的文件,對於規則%.o:%.c,$<表示第一個找到的.c文件。簡而言之,假設在一個文件夾下有若干.c文件,那麼下面的規則:
%.o:%.c
gcc -O2 -o $@ $< #表示Tab鍵
表示把所有的.c文件編譯成中間.o文件。
❹ linux下如何查看一個二進制文件是使用-O0優化還是-O2優化
gcc默認提供了5級優化選項:
-O/-O0:無優化(默認)
-O1:使用能減少目標文件大小以及執行時間並且不會使編譯時間明顯增加的優化。該模式在編譯大型程序的時候會花費更多的時間和內存。在-O1下:編譯會嘗試減少代碼體積和代碼運行時間,但是並不執行會花費大量時間的優化操作。
-O2: 包含-O1的優化並增加了不需要在目標文件大小和執行速度上進行折衷的優化。GCC執行幾乎所有支持的操作但不包括空間和速度之間權衡的優化,編譯器不執行循環展開以及函數內聯。這是推薦的優化等級,除非你有特殊的需求。-O2會比-O1啟用多一些標記。與-O1比較該優化-O2將會花費更多的編譯時間當然也會生成性能更好的代碼。
-Os:專門優化目標文件大小,執行所有的不增加目標文件大小的-O2優化選項。同時-Os還會執行更加優化程序空間的選項。這對於磁碟空間極其緊張或者CPU緩存較小的機器非常有用。但也可能產生些許問題,因此軟體樹中的大部分ebuild都過濾掉這個等級的優化。使用-Os是不推薦的。
-O3: 打開所有-O2的優化選項並且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize優化選項。這是最高最危險的優化等級。用這個選項會延長編譯代碼的時間,並且在使用gcc4.x的系統里不應全局啟用。自從3.x版本以來gcc的行為已經有了極大地改變。在3.x,-O3生成的代碼也只是比-O2快一點點而已,而gcc4.x中還未必更快。用-O3來編譯所有的軟體包將產生更大體積更耗內存的二進制文件,大大增加編譯失敗的機會或不可預知的程序行為(包括錯誤)。這樣做將得不償失,記住過猶不及。在gcc 4.x.中使用-O3是不推薦的。
————————————————
版權聲明:本文為CSDN博主「rongming_lu」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/LU_ZHAO/java/article/details/104516291
❺ makefile裡面 gcc -O2 -o $@ $< 是什麼意思
-O2表示優化選項,2表示最優優化,即編譯器會優化你的程序;-o表示後邊接的是文件名稱;$@是Makefile的通配符,代指前面指定的文件名。
一些常見的自動化變數說明如下:
(1) $@ ——目標文件的名稱;
(2) $^ ——所有的依賴文件,以空格分開,不包含重復的依賴文件;
(3) $< ——第一個依賴文件的名稱。
示例:
main:main.c sort.o
gcc main.c sort.o -o main
表示為簡潔的就是:
main:main.c sort.o
gcc $^ -o $@
(5)編譯選項o2擴展閱讀:
在Makefile文件中描述了整個工程所有文件的編譯順序、編譯規則。Makefile 有自己的書寫格式、關鍵字、函數。像C 語言有自己的格式、關鍵字和函數一樣。而且在Makefile 中可以使用系統shell所提供的任何命令來完成想要的工作。Makefile在絕大多數的IDE 開發環境中都在使用,已經成為一種工程的編譯方法。