下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C 語(yǔ)言高效編程的幾招小技巧這篇文章主要介紹了C 這篇文章主要介紹了C 語(yǔ)言高效編程的幾招小技巧,本文講解了以空間換時(shí)間、用數(shù)學(xué)方法解決問題以及使用位操作等編輯技巧,并給出若干方法和代碼實(shí)例,需要的朋友可以參考下引言:編寫高效簡(jiǎn)潔的C 語(yǔ)言代碼,是許多軟件工程師追求的目標(biāo)。本文就工作中的一些體會(huì)和經(jīng)驗(yàn)做相關(guān)的闡述,不對(duì)的地方請(qǐng)各位指教。體會(huì)和經(jīng)驗(yàn)做相關(guān)的闡述,不對(duì)的地方請(qǐng)各位指教。1 招:以空間換時(shí)間例如:字符串的賦值。計(jì)算機(jī)程序中最大的矛盾是空間和時(shí)間的矛盾,那么,從這個(gè)角度出發(fā)逆向思維來(lái)考慮程序的效率問題,我們就有了解決問題的第1 招以空間換時(shí)間。例如:字符串的賦值。代碼如下:#defin
2、e LEN 32 char string1 LEN;memset (string1,0,LEN);strcpy (string1,“This is a example!”);方法 B:代碼如下:const char string2LEN =“This is a example!”;char * cp;cp = string2 ;(使用的時(shí)候可以直接用指針來(lái)操作。)使用指針就可以操作了,而A 需要調(diào)用兩個(gè)字符函數(shù)才能完成。B 的缺點(diǎn)在于靈 活性沒 B 使用指針就可以操作了,而A 需要調(diào)用兩個(gè)字符函數(shù)才能完成。B 的缺點(diǎn)在于靈 活性沒有 A 具有更好的靈活性;如果采用方法B如果系統(tǒng)的實(shí)時(shí)性要求很高
3、,內(nèi)存還有一些,那我推薦你使用該招數(shù)。如果系統(tǒng)的實(shí)時(shí)性要求很高,內(nèi)存還有一些,那我推薦你使用該招數(shù)。該招數(shù)的變招使用宏函數(shù)而不是函數(shù)。舉例如下:C:代碼如下代碼如下:#define bwMCDR2_ADDRESS 4#define bsMCDR2_ADDRESS 17 int BIT_MASK(intbf)return (1U (bw #bf) - 1) (bs #bf);void SET_BITS(intdst, intbf, intval) dst = (dst) & (BIT_MASK(bf) | /(val) (bs #bf) & (BIT_MASK(bf)SET_BITS(MCDR2
4、, MCDR2_ADDRESS, RegisterNumber);SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);方法 D:代碼如下:#define bwMCDR2_ADDRESS 4#define bsMCDR2_ADDRESS 17#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)#define BIT_MASK(bf) (1U (bw #bf) - 1) (bs #define SET_BITS(dst,bf,val) /(dst) = (dst) & (BIT_MASK(bf) | /(val)
5、(bs #bf) & (BIT_MASK(bf)SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);要知道的是,函數(shù)調(diào)用是要使用系統(tǒng)的棧來(lái)保存數(shù)據(jù)的,如果編譯器里有棧檢查 選項(xiàng), 也要在函數(shù)調(diào)用時(shí)保CPU 時(shí)間。而宏函數(shù)不存在這個(gè)問題。宏函數(shù)僅僅作為預(yù)先寫好的代碼嵌入到當(dāng)前程序,不會(huì)產(chǎn)生C 家仔細(xì)體會(huì)。D 方法是我看到的最好的置位操作函數(shù),是 ARM C 家仔細(xì)體會(huì)。第 2 招:數(shù)學(xué)方法解決問題現(xiàn)在我們演繹高效現(xiàn)在我們演繹高效C 語(yǔ)言編寫的第二招采用數(shù)學(xué)方法來(lái)解決問題。數(shù)學(xué)是計(jì)算機(jī)之母,沒有數(shù)學(xué)的依據(jù)和基礎(chǔ),就沒有計(jì)算機(jī)的發(fā)展,所以在編寫程數(shù)學(xué)是計(jì)算機(jī)
6、之母,沒有數(shù)學(xué)的依據(jù)和基礎(chǔ),就沒有計(jì)算機(jī)的發(fā)展,所以在編寫程舉例如下,求 1100的和。 方法 方法 E代碼如下:int I , j;for (I = 1 ;I3;I = 257 3;J = 456 - (456 4 4);在字面上好像在字面上好像H 比G 麻煩了好多,但是,仔細(xì)查看產(chǎn)生的匯編代碼就會(huì)明白,方G 與運(yùn)算;而方法H 器的不同,可能效率的差距不大,但是,以我目前遇到的MS C ,ARM C 來(lái)看,效率的差距還是不小。相關(guān)匯編代碼就不在這里列舉了。CPU 的不同而產(chǎn)生的問題。比如說(shuō),在PC 上用這招編寫PC 上調(diào)試通過,在移植到一個(gè)16 患。所以只有在一定技術(shù)進(jìn)階的基礎(chǔ)下才可以使用這
7、招。高效C 高效C 嵌入?yún)R編?!?”。這種說(shuō)法雖然偏激了一 編,混合編程。舉例如下,將數(shù)組一賦值給數(shù)組二編,混合編程。舉例如下,將數(shù)組一賦值給數(shù)組二,要求每一字節(jié)都相符。代碼如下:char string11024,string21024;代碼如下:int I;for (I =0 ;I1024;I+)*(string2 + I) = *(string1 +代碼如下:int I;for (I =0 ;I1024;I+)*(string2 + I) = *(string1 + I)一個(gè)操作系統(tǒng)吧?所以,為了獲得程序的高效率,我們只好采用變通的方法 嵌入?yún)RJ代碼如下代碼如下:#ifdef _PC_ i
8、nt I;for (I =0 ;I1024;I+)*(string2 + I) = *(string1 + I);#else#else#ifdef _ARM_ asmMOV R0,string1 MOV R1,string2 MOV R2,#0loop:LDMIA R0!, R3-R11 STMIA R1!, R3-R11 ADD R2,R2,#8CMP R2, #400BNE loop#endifARM 128 次循環(huán)就完成了同樣的操作。這里有 朋友會(huì)說(shuō),方法 I 是最常見的方法,使用了 1024 ARM 128 次循環(huán)就完成了同樣的操作。這里有 朋友會(huì)說(shuō),為什么不用標(biāo)準(zhǔn)的內(nèi)存拷貝函數(shù)呢?這是因?yàn)樵谠磾?shù)據(jù)里可能含有數(shù)據(jù)為0 的字節(jié),這樣的話,標(biāo)準(zhǔn)庫(kù)函數(shù)會(huì)提前結(jié)束而不會(huì)完成我們要求的操作。這個(gè) 例
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 瀝青混凝土心墻堆石壩設(shè)計(jì)與計(jì)算
- 牛品種改良技術(shù)
- 建設(shè)工程施工合同糾紛要素式起訴狀模板法務(wù)團(tuán)隊(duì)審定版
- 2026 年有子女離婚協(xié)議書標(biāo)準(zhǔn)版
- 2026 年離婚協(xié)議書權(quán)威正規(guī)范本
- 2026 年官方化離婚協(xié)議書專業(yè)范本
- 房企hr年終總結(jié)(3篇)
- 釣友俱樂部年終總結(jié)(3篇)
- 干部選拔任用工作情況的自查報(bào)告
- 2026年虛擬主機(jī)租用合同
- 東風(fēng)7電路圖解析
- 數(shù)字填圖系統(tǒng)新版(RgMap2.0)操作手冊(cè)
- YY/T 1778.1-2021醫(yī)療應(yīng)用中呼吸氣體通路生物相容性評(píng)價(jià)第1部分:風(fēng)險(xiǎn)管理過程中的評(píng)價(jià)與試驗(yàn)
- GB/T 17213.4-2015工業(yè)過程控制閥第4部分:檢驗(yàn)和例行試驗(yàn)
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- GB∕T 5900.2-2022 機(jī)床 主軸端部與卡盤連接尺寸 第2部分:凸輪鎖緊型
- 2011-2015廣汽豐田凱美瑞維修手冊(cè)wdl
- DFMEA編制作業(yè)指導(dǎo)書新版
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測(cè)技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
評(píng)論
0/150
提交評(píng)論