版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式系統(tǒng)程序設(shè)計(jì)大連理工大學(xué)軟件學(xué)院嵌入式系統(tǒng)工程系賴曉晨ARMC程序序設(shè)計(jì)優(yōu)優(yōu)化編譯器的的特性數(shù)據(jù)類型型對(duì)程序序效率的的影響循環(huán)方式式對(duì)程序序效率的的影響指針對(duì)程程序效率率的影響響邊界對(duì)齊齊對(duì)程序序的影響響一、編譯譯器的特特性voidsetzero(char*p, intn)for(;n0;n-) *p=0;p+; 清除從字符型指針p開(kāi)始的n個(gè)字節(jié)空空間編譯器的的特性(續(xù))voidsetzero(char*p, intn)for(;n0;n-) *p=0;p+; 問(wèn)題:編譯器不不知道n是否為0。編譯器不不知道p是否4字字節(jié)對(duì)齊齊。編譯器不不知道n是否為4的倍數(shù)數(shù)。結(jié)論:編譯器是是保守的的:
2、必須假定定n的所有可可能值。必須假定定p所有可能能的邊界界值。編寫(xiě)高效效C代碼碼的要求求了解哪些些方面編編譯器是是保守的的了解編譯譯器對(duì)應(yīng)應(yīng)的處理理器體系系結(jié)構(gòu)二、數(shù)據(jù)據(jù)類型對(duì)對(duì)程序效效率的影影響unsignedchari;for(i=0;i100; i+)i聲明為為unsignedchar的優(yōu)點(diǎn)點(diǎn)?無(wú)符號(hào)字字符變量量表示的范圍超超過(guò)了100,可以完完成題目目要求。char更節(jié)省省寄存器器和內(nèi)存存空間。函數(shù)參數(shù)數(shù)類型總體思想想:盡量量采用int、long類型型。有符號(hào)數(shù)數(shù)和無(wú)符符號(hào)數(shù)如果程序序中只有有加、減減、乘法法,那么么有符號(hào)號(hào)數(shù)和無(wú)無(wú)符號(hào)數(shù)數(shù)的執(zhí)行行效率沒(méi)沒(méi)有區(qū)別別。如果有除除法,那那么
3、需要要額外的的步驟。有符號(hào)數(shù)數(shù)和無(wú)符符號(hào)數(shù)(續(xù))有符號(hào)除除法在ARM C中中,如果果x是負(fù)負(fù)數(shù),那那么除2操作不不是一個(gè)個(gè)右移操操作。例例如-3/2=-1。但是在在ARM機(jī)器中中:-3-2-1直接右移移加1右移移結(jié)論:使用無(wú)符符號(hào)數(shù)除除法效率率更高。對(duì)于存放放在寄存存器中的的變量,盡量采采用整型型。盡可能使使用無(wú)符符號(hào)數(shù)進(jìn)進(jìn)行運(yùn)算算。函數(shù)參數(shù)數(shù)和返回回值盡量量采用整整型數(shù)據(jù)據(jù)??偨Y(jié)三、循環(huán)環(huán)方式對(duì)對(duì)程序效效率的影影響循環(huán)是代代碼優(yōu)化化的重點(diǎn)點(diǎn)C程序主主要使用用for和while進(jìn)行循循環(huán)固定次數(shù)數(shù)的循環(huán)環(huán)什么是ARM上上編寫(xiě)for循循環(huán)最高高效的方方法?固定次數(shù)數(shù)的循環(huán)環(huán)(續(xù))inti;for
4、(i=0;i0; i-)上面代碼碼要實(shí)現(xiàn)現(xiàn)轉(zhuǎn)移需需要兩條條指令,首先把把某寄存存器的內(nèi)內(nèi)容和100比比較,其其次條件件符合時(shí)時(shí)轉(zhuǎn)移。相同功功能的代代碼如果果寫(xiě)作下下面形式式,則可可用“BNE”一條指指令實(shí)現(xiàn)現(xiàn)比較以以及轉(zhuǎn)移移兩個(gè)功功能。至少一次次循環(huán)對(duì)于“for(;n0;n-)”,如果能能確保第第一次循循環(huán)之前前n恒大大于0,此時(shí)取取消第一一次n大大于0的的判斷,是不會(huì)會(huì)影響程程序的邏邏輯,而而且顯然然程序執(zhí)執(zhí)行效率率可以提提高,用用dowhile循環(huán)可可以達(dá)到到這一目目的循環(huán)展開(kāi)開(kāi)循環(huán)開(kāi)銷銷重復(fù)100次次,假設(shè)設(shè)每次循循環(huán)開(kāi)銷銷占用4個(gè)時(shí)鐘鐘周期,循環(huán)體體中的加加法占用用1個(gè)時(shí)時(shí)鐘周期期,那
5、么么有效程程序僅占占CPU執(zhí)行時(shí)時(shí)間的20%,其余80%都都是服務(wù)務(wù)性開(kāi)銷銷,效率率為1/5。inti,t=0;for(i=100;i0; i-)t+; 循環(huán)展開(kāi)開(kāi)(續(xù))inti,t=0;for(i=50;i0; i-)t+;t+; 每次循環(huán)環(huán)開(kāi)銷4個(gè)時(shí)鐘鐘周期不不變,但但是有效效程序占占用2個(gè)個(gè)時(shí)鐘周周期,也也即效率率提高到到1/3。循環(huán)展開(kāi)開(kāi)(續(xù))問(wèn)題:循環(huán)展開(kāi)開(kāi)到什么么程度?全部展展開(kāi)是否否最優(yōu)?要意識(shí)識(shí)到循環(huán)環(huán)展開(kāi)是是有代價(jià)價(jià)的:增加程序序的長(zhǎng)度度。循環(huán)體內(nèi)內(nèi)代碼越越多,就就越有可可能造成成cache失失效所以在任任何程度度上展開(kāi)開(kāi)循環(huán)要要具體問(wèn)問(wèn)題具體體分析,在執(zhí)行行時(shí)間和和代碼量量
6、間找到到一個(gè)最最佳平衡衡點(diǎn)??偨Y(jié):循環(huán)計(jì)數(shù)數(shù)遞減。如確定循循環(huán)次數(shù)數(shù)大于1,那么么用dowile。對(duì)于小循循環(huán)體,可以循循環(huán)展開(kāi)開(kāi)。四、指針針對(duì)程序序效率的的影響別名當(dāng)兩個(gè)指指針指向向同一個(gè)個(gè)對(duì)象時(shí)時(shí),這兩兩個(gè)指針針被稱作作該對(duì)象象的別名名。編譯器的的特點(diǎn):不知道是是否是別別名編譯器是是悲觀的的指針對(duì)程程序效率率的影響響(續(xù))void throwtobag(int *mybag, int*yourbag, int*stone)*mybag+=*stone;/語(yǔ)句句1*yourbag+=*stone;/語(yǔ)句句2站在編譯譯器的角角度思考考一下有有無(wú)問(wèn)題題?指針對(duì)程程序效率率的影響響(續(xù))上面代碼碼
7、的語(yǔ)句句1被GCC編編譯時(shí),會(huì)出現(xiàn)現(xiàn)諸如“LDR ri,r2,#0”之類匯匯編指令令,表示示首先要要從stone指向的的地址讀讀出一個(gè)個(gè)數(shù)據(jù),以便來(lái)來(lái)把它加加到mybag指向指指明的地地址處。此處r2代表表stone,因?yàn)樗呛瘮?shù)數(shù)的第三三個(gè)參數(shù)數(shù),輪到到r2來(lái)來(lái)承載它它。令人人驚奇的的是,編編譯語(yǔ)句句2時(shí),仍然包包含一條條“LDRri,r2,#0”語(yǔ)語(yǔ)句,stone的值值不是已已經(jīng)由語(yǔ)語(yǔ)句1得得到了嗎嗎?為什么還還要這一一條語(yǔ)句句?指針對(duì)程程序效率率的影響響(續(xù))討論:編編譯器不不會(huì)自動(dòng)動(dòng)識(shí)別指指針指向向的對(duì)象象不知道是是否是別別名悲觀、保保守思考:采采用什么么辦法可可以避免免讀兩次次內(nèi)存
8、?五、邊界界對(duì)齊對(duì)對(duì)程序的的影響邊界對(duì)齊齊問(wèn)題_packed關(guān)鍵鍵字邊界對(duì)齊齊問(wèn)題對(duì)齊問(wèn)題題對(duì)結(jié)構(gòu)構(gòu)體也有有影響。在結(jié)構(gòu)構(gòu)體中定定義若干干變量如如果長(zhǎng)短短相間,由于對(duì)對(duì)齊問(wèn)題題,勢(shì)必必浪費(fèi)一一些空間間。例如如一個(gè)整整形變量量和一個(gè)個(gè)字符變變量放在在一起,總共占占用8個(gè)個(gè)字節(jié)空空間,但但是其中中保存有有效數(shù)據(jù)據(jù)的只有有5個(gè)字字節(jié)。所所以可以以采用這這種策略略:在結(jié)構(gòu)體體的最前前面定義義的所有有的字符符型變量量,中間間定義所所有的短短整型變變量,最最后定義義所有的的整形變變量,可以把把浪費(fèi)的的空間減減到最小小。_packed關(guān)鍵鍵字有的C編編譯器支支持_packed關(guān)鍵字,它可以以突破邊邊界對(duì)齊齊的限制制,在任任意類型型的變量量按照任任意順序序定義的的情況下下,都能能夠緊湊湊的安排排存儲(chǔ)空空間,此此時(shí)的代代價(jià)是犧犧牲程序序的運(yùn)行行效率_packed關(guān)鍵鍵字(續(xù))代碼完成成從任意意地址p處讀取取一個(gè)整整型變量量,且不不要求此此地址是是4的整整數(shù)倍,返回值值為此地地址起始始的4字字節(jié)數(shù)據(jù)據(jù)。intfetchint(_packedint*p) return*p; _packed關(guān)鍵鍵字(續(xù))上圖是上上述代碼碼的實(shí)例例,數(shù)據(jù)據(jù)按照小小端存儲(chǔ)儲(chǔ),讀取取一個(gè)沒(méi)沒(méi)有對(duì)齊齊
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房屋戶外景觀兒童游樂(lè)區(qū)施工合同
- 商業(yè)街區(qū)消防設(shè)施投標(biāo)范本
- 野外科研車司機(jī)管理指南
- 外架班組安全生產(chǎn)培訓(xùn)與考核
- 農(nóng)貿(mào)市場(chǎng)電氣設(shè)備維護(hù)合同
- 美容院急救藥箱配置標(biāo)準(zhǔn)
- 建筑工具簡(jiǎn)單租賃合同
- 道路橋梁清潔施工勞務(wù)合同
- 珠寶店廣告位租賃合同
- 體育賽事聯(lián)合項(xiàng)目部管理辦法
- 普法課件:統(tǒng)計(jì)法培訓(xùn)
- 《我和鳥(niǎo)類做朋友》(教學(xué)設(shè)計(jì))-2023-2024學(xué)年五年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)粵教版
- 關(guān)于合同違約扣款的函件
- 蘇州2024年江蘇蘇州市市屬事業(yè)單位招聘筆試及筆試歷年典型考題及考點(diǎn)附答案解析
- NB-T33004-2013電動(dòng)汽車充換電設(shè)施工程施工和竣工驗(yàn)收規(guī)范
- 2024版勞動(dòng)合同合同范本
- 古希臘文明智慧樹(shù)知到期末考試答案章節(jié)答案2024年復(fù)旦大學(xué)
- 勞務(wù)合同不續(xù)期通知函
- 2024年04月山西醫(yī)科大學(xué)第二醫(yī)院招考聘用42人筆試歷年典型考題及考點(diǎn)研判與答案解析
- 印刷品退貨處理協(xié)議
- 2024年中國(guó)郵政集團(tuán)有限公司校園招聘考試試題參考答案
評(píng)論
0/150
提交評(píng)論