淺談Linux環(huán)境下gcc優(yōu)化級別
代碼優(yōu)化可以說是一個非常復(fù)雜而又非常重要的問題,以筆者多年的linux c開發(fā)經(jīng)驗(yàn)來說優(yōu)化通常分為兩個方面,一是人為優(yōu)化,也就是基于編程經(jīng)驗(yàn)采用更簡易的數(shù)據(jù)結(jié)構(gòu)函數(shù)等來降低編譯器負(fù)擔(dān),二是采用系統(tǒng)自帶的優(yōu)化模式,也就是gcc - o系列,下面我將簡述一下各級優(yōu)化的過程以及實(shí)現(xiàn)。
gcc - o1 首先o1上面還有一個o0,那個是不提供任何優(yōu)化,項(xiàng)目中幾乎不會使用,而o1使用就非常廣泛了,o1是最基本的優(yōu)化,主要對代碼的分支,表達(dá)式,常量來進(jìn)行優(yōu)化,編譯器會在較短的時間下將代碼變得更加短小,這樣體積就會變得更小,會減少內(nèi)存的占用率,在操作系統(tǒng)進(jìn)行內(nèi)存調(diào)度時就會更快。但是事情沒有絕對的優(yōu)點(diǎn),當(dāng)一個龐大的程序被拆碎細(xì)分的話,內(nèi)存占用會大大增加,由于當(dāng)今系統(tǒng)大多數(shù)都是多線程,就會出現(xiàn)卡頓和反應(yīng)延遲。
gcc - o2 這個優(yōu)化級別是o1的進(jìn)階,在上一級的基礎(chǔ)上會進(jìn)行更嚴(yán)格的細(xì)分,最重要的是加入了寄存器的使用。寄存器是cpu中重要的組成部分,此外還有運(yùn)算器和控制器,計算機(jī)顧名思義,要進(jìn)行各種龐雜的計算,由于cpu速度較快,所以計算的中間結(jié)果都會保存在寄存器中,這樣可以大大提高系統(tǒng)的效率,但是寄存器造價高昂,數(shù)量有限,所以一般來說程序不會放在寄存器中,另一種將代碼放在寄存器的方式是使用register修飾變量,適用于頻繁調(diào)用的變量。
gcc - o3 這個優(yōu)化屬于非常強(qiáng)大的優(yōu)化,因?yàn)榫幾g器會進(jìn)行預(yù)測,對循環(huán)每一層的預(yù)測,以便于將循環(huán)拆分,可以提高執(zhí)行效率。編譯器還會試圖用已有的值來代替未知的值,并且還會用加代替乘,因?yàn)檫\(yùn)算器的特性,乘法十分復(fù)雜耗時。當(dāng)然o3的缺點(diǎn)最明顯,那就是o3因?yàn)樵噲D預(yù)測程序的走向,可能會出現(xiàn)誤差,導(dǎo)致錯誤和程序不可逆轉(zhuǎn)的走向。所以一般o3不建議使用。
以上就是關(guān)于優(yōu)化的三個等級,對于優(yōu)化,系統(tǒng)的優(yōu)化還是機(jī)械的,程序員對于語言深刻的理解,巧妙地算法可能會更有意義。
總結(jié)
以上就是本文關(guān)于淺談Linux環(huán)境下gcc優(yōu)化級別的全部內(nèi)容,希望對大家有所幫助。歡迎大家繼續(xù)參閱本站其他相關(guān)專題,感謝朋友們對腳本之家網(wǎng)站的支持。
相關(guān)文章
linux系統(tǒng)中設(shè)置定時任務(wù)的實(shí)現(xiàn)方式
在SpringBoot中設(shè)置定時任務(wù),需要使用@EnableScheduling注解和@Scheduled注解,配合cron表達(dá)式,在Linux系統(tǒng)中,使用crontab工具可設(shè)置系統(tǒng)級的定時任務(wù),首先需要創(chuàng)建執(zhí)行腳本,并賦予執(zhí)行權(quán)限,然后通過crontab?-e進(jìn)入編輯界面2024-10-10虛擬機(jī)Linux系統(tǒng)忘記密碼修改root或其他用戶密碼的方法
這篇文章主要介紹了虛擬機(jī)Linux系統(tǒng)忘記密碼修改root或其他用戶密碼的方法,在文章需要大家注意本文基于centos7環(huán)境進(jìn)行操作,由于centos的版本是有差異的,所以需要大家確認(rèn)版本,感興趣的朋友跟隨小編一起看看吧2018-08-08linux內(nèi)核編程container of()函數(shù)介紹
container_of在Linux內(nèi)核中是一個常用的宏,用于從包含在某個結(jié)構(gòu)中的指針獲得結(jié)構(gòu)本身的指針,這篇文章主要給大家介紹了關(guān)于linux內(nèi)核編程container of()函數(shù)的相關(guān)資料,需要的朋友可以參考下2021-07-07在Apache服務(wù)器上啟用GZip壓縮靜態(tài)內(nèi)容的方法
這篇文章主要介紹了在Apache服務(wù)器上啟用GZip壓縮靜態(tài)內(nèi)容的方法,通過配置.htaccess文件即可輕松實(shí)現(xiàn),同時附帶了一些GZip的常用命令,需要的朋友可以參考下2015-08-08簡單了解linux終端創(chuàng)建文件的2種常用方法
這篇文章主要介紹了簡單了解linux終端創(chuàng)建文件的2種常用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06配置 Apache 服務(wù)器禁止所有非法域名 訪問自己的服務(wù)器
這篇文章主要介紹了配置 Apache 服務(wù)器禁止所有非法域名 訪問自己的服務(wù)器,需要的朋友可以參考下2017-06-06