C語言高效程式設計的幾招(絕對實用,絕對經典)

2021-08-20 04:17:10 字數 2551 閱讀 6922

**:

非常感謝原文作者

第一招:以空間換時間

電腦程式中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程式的效率問題

eg.字串的賦值

//

方法a 通常辦法

#define len 32

char

string1[len];

memset(string1,

0,len);

strcpy(string1,

"this is an example!!");

//方法b

const

char string2[len]="

this is an example";

char *cp;

cp=string2;//

(使用的時候可以指間用指標來操作)

從上面的例子可以看出,a和b的效率是不能比的,在同樣的儲存空間下,b直接使用指標就可以操作了,而a需要呼叫兩個字元函式才能完成;b的缺點在於靈活性沒有a好,在需要頻繁更改乙個字串內容的時候,a具有更好的靈活性;如果採用方法b,則需要預存許多字串,雖然占用了大量的記憶體,但是獲得了程式執行的高效率。

如果系統的實時性要求很高,記憶體還有一些,那我推薦使用該招數

該招數的邊招,使用巨集函式而不是函式;完成i/o的getchar(),做字元測試的sdigit都是得到觀法認可的例子,這樣做最根本的理由就是執行效率,巨集可以避免函式呼叫的開銷。

//

方法c#define bwmcdr2_address 4

#define bsmcdr2_address 17

int bit_mask(int

_bf)

void set_bits(int _dst,int _bf,int

_val)

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)(((iu<

#define set_bits(_dst,_bf,_val)\((_dst)&~(bit_mask(_bf)))| (((_val)<

set_bits(mcdr2,mcdr2_address,registernumber);

巨集函式和函式的區別在於,巨集函式占用了大量的空間而函式占用了時間,大家要知道的是,函式呼叫是要使用系統的棧來儲存資料的,如果編譯器裡有棧檢查選項,一般在函式的頭會潛入一些彙編語句對當前棧進行檢查;同時,cpu也要在函式呼叫時儲存和恢復當前的現場,進行壓棧和出棧操作,所以,函式呼叫需要一些cpu事件,而巨集函式不存在這個問題。巨集函式僅僅作為預先寫好的**嵌入到當前程式,不會產生函式呼叫,所以僅僅是占用了空間,在頻繁呼叫同乙個巨集函式時候,該現象尤其突出。

d方法是我看到的最好的置位操作函式,是arm公司原始碼一部分,在短短的三行內實現了很多功能,幾乎涵蓋了所有位操作功能,c方法是其變體,其中滋味還需大家仔細體會!!

第2招:數學方法解決問題

現在我們演繹高效c語言編寫的第二招---採用數學方法來解決問題。

數學是計算機之母,沒有數學的依據和基礎,就沒有計算機發展,所以在編寫程式的時候,採用一些數學方法會對程式的執行效率有數量級的提高。

求1~100的和

//

方法eint i,j=0

;for(i=0;i<100;i++)

//方法f

i=(100*(1+100))/2

很顯然,效果自然不言而喻,所以現在我們程式設計序的時候,更多的是動腦筋找規律,最大限度地發揮數學的威力提高程式執行效率。

第3招:使用位操作

實現高效的c語言編寫的第三招----使用位操作,減少除法和取模的運算。

在電腦程式中,資料的位是可以操作的最小資料單位,理論上可以用「位運算」來完成所有的運算和操作。一般的位操作是用來控制硬體的,或者做資料變換使用,但是,靈活的位操作可以有效提高程式執行的效率。

//

方法:g

inti,j

i=257/8

;j=456%32;//

方法:h

inti,j

i=257>>3

;j=456-(456>>4>>4);

在字面上好像h比g麻煩好多,但是,仔細檢視產生的彙編**就會明白,方法g呼叫了基本的取模函式和除法函式,既有函式呼叫,還有很多匯程式設計序和暫存器參與運算;而方法h則僅僅是極具相關的彙編,**更簡潔,效率更高。當然,由於編譯器的不同,可能效率差距不大。

運用這招需要注意的是

,因為cpu的不同而產生的問題,比如說,在pc上用這招編寫的程式,並在pc上除錯通過,在一直到乙個16位機子平台上的時候,可能會產生**隱患,所以只有在一定技術高階的基礎下才可以使用這招。

使用c語言進行高效程式設計,我的體會僅此而已,在此還請各位高手共同切磋,希望各位能給出更好的方法,大家一起提高我們的程式設計技巧。

C語言高效程式設計的幾招,你會幾招了?

第1招 以空間換時間 電腦程式中最大的矛盾是空間和時間的矛盾,那麼,從這個角度出發逆向思維來考慮程式的效率問題,我們就有了解決問題的第1招 以空間換時間。例如 字串的賦值。方法a,通常的辦法 define len 32 char string1 len memset string1,0,len st...

基於ARM的高效C語言程式設計

arm處理器提高執行速度和減小 尺寸是嵌入式軟體設計的關鍵需求,以其高效能 低功耗 低成本等優勢被廣泛應用於各種成功的32位嵌入式系統中。儘管大多數的arm編譯器和偵錯程式都帶有效能優化工具,但是為了保證其正確性,編譯器必須是穩妥和安全的,而且它還受到處理器自身結構的限制。因此,程式設計人員必須在理...

C語言程式設計題目(實用經典)3

輸入三個整數x,y,z,把這三個數從小到大輸出 define crt secure no warnings include include 輸入三個整數x,y,z,請把這三個數由小到大輸出 int main if x z if y z printf 這三個整數從小到大排列為 d d d n x,y,...