2023學(xué)年完整公開課版GCC代碼優(yōu)化_第1頁
2023學(xué)年完整公開課版GCC代碼優(yōu)化_第2頁
2023學(xué)年完整公開課版GCC代碼優(yōu)化_第3頁
2023學(xué)年完整公開課版GCC代碼優(yōu)化_第4頁
2023學(xué)年完整公開課版GCC代碼優(yōu)化_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

GCC代碼優(yōu)化*CONTENTSPAGE目錄頁1理解代碼優(yōu)化2目錄代碼優(yōu)化參數(shù)1、理解代碼優(yōu)化GCC可以對(duì)代碼進(jìn)行優(yōu)化,它通過編譯選項(xiàng)-On來控制優(yōu)化代碼的生成,其中n是一個(gè)代表優(yōu)化級(jí)別的整數(shù)雖然優(yōu)化選項(xiàng)可以加快代碼的運(yùn)行速度,但會(huì)使調(diào)試變得異常艱難。因?yàn)榇a在經(jīng)過優(yōu)化之后原先在源程序中聲明和使用的變量很可能不再使用控制流也可能會(huì)突然跳轉(zhuǎn)到其他的地方循環(huán)語句也有可能因?yàn)檠h(huán)展開而變得到處都有所以:一般會(huì)等到程序調(diào)試完成以后,再用-On選項(xiàng)重新進(jìn)行編譯,對(duì)代碼進(jìn)行優(yōu)化,形成正式的運(yùn)行版本。而程序調(diào)試時(shí),一般不采用-On選項(xiàng)進(jìn)行編譯代碼優(yōu)化代碼優(yōu)化指的是編譯器通過分析源代碼,找出其中尚未達(dá)到最優(yōu)的部分,然后對(duì)其重新進(jìn)行組合,目的是改善程序的執(zhí)行性能。gcc提供的代碼優(yōu)化功能非常強(qiáng)大,它通過編譯選項(xiàng)-On來控制優(yōu)化代碼的生成,其中n是一個(gè)代表優(yōu)化級(jí)別的整數(shù)。對(duì)于不同版本的gcc來講,n的取值范圍及其對(duì)應(yīng)的優(yōu)化效果可能并不完全相同,比較典型的范圍是從0變化到2或3。代碼優(yōu)化2、代碼優(yōu)化參數(shù)編譯時(shí)使用選項(xiàng)-O可以告訴gcc同時(shí)減小代碼的長度和執(zhí)行時(shí)間,其效果等價(jià)于-O1。在這一級(jí)別上能夠進(jìn)行的優(yōu)化類型雖然取決于目標(biāo)處理器,但一般都會(huì)包括線程跳轉(zhuǎn)(ThreadJump)和延遲退棧(DeferredStackPops)兩種優(yōu)化。選項(xiàng)-O2告訴gcc除了完成所有-O1級(jí)別的優(yōu)化之外,同時(shí)還要進(jìn)行一些額外的調(diào)整工作,如處理器指令調(diào)度等。選項(xiàng)-O3則除了完成所有-O2級(jí)別的優(yōu)化之外,還包括循環(huán)展開和其他一些與處理器特性相關(guān)的優(yōu)化工作。通常來說,數(shù)字越大優(yōu)化的等級(jí)越高,同時(shí)也就意味著程序的運(yùn)行速度越快。許多Linux程序員都喜歡使用-O2選項(xiàng),因?yàn)樗趦?yōu)化長度、編譯時(shí)間和代碼大小之間取得了一個(gè)比較理想的平衡點(diǎn)。代碼優(yōu)化二、實(shí)例分析實(shí)例

count.c

#include<stdio.h>

intmain(void){

doublecounter;

doubleresult;

doubletemp;

for(counter=0;counter<4000.0*4000.0*4000.0

/20.0+2030;

counter+=(5-3+2+1)/4)

{

temp=counter/1239;

result

=counter;

}

printf("Resultis%lf\n",result);

return0;}代碼優(yōu)化首先不加任何優(yōu)化選項(xiàng)進(jìn)行編譯:[david@DAVIDdavid]$gcc-Wallcount.c-ocount借助Linux提供的time命令,可以大致統(tǒng)計(jì)出該程序在運(yùn)行時(shí)所需要的時(shí)間:[david@DAVIDdavid]$time./countResultis3200002029.000000real

1m59.357suser

1m59.140ssys

0m0.050s代碼優(yōu)化接下來使用優(yōu)化選項(xiàng)來對(duì)代碼進(jìn)行優(yōu)化處理:[david@DAVIDdavid]$gcc-Wallcount.c-ocount2在同樣的條件下再次測(cè)試一下運(yùn)行時(shí)間:[david@DAVIDdavid]$time./count2Resultis3200002029.000000real

0m26.573suser

0m26.540ssys

0m0.010s代碼優(yōu)化對(duì)比兩次執(zhí)行的輸出結(jié)果不難看出,程序的性能的確得到了很大幅度的改善,由原來的1分59秒縮短到了26秒。這個(gè)例子是專門針對(duì)gcc的優(yōu)化功能而設(shè)計(jì)的,因此優(yōu)化前后程序的執(zhí)行速度發(fā)生了很大的改變。盡管gcc的代碼優(yōu)化功能非常強(qiáng)大,但作為一名優(yōu)秀的Linux程序員,首先還是要力求能夠手工編寫出高質(zhì)量的代碼。如果編寫的代碼簡短,并且邏輯性強(qiáng),編譯器就不會(huì)做更多的工作,甚至

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論