高效率C語言編程的幾個方法

來源:互聯網
上載者:User
1.時間與空間問題
在嵌入式領域,我們經常會遇到時間和空間上的問題, 有的是即時性要求比較高的那麼就需要利用空間來換取時間,
方法A:
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,“This is a example!!”);
方法B:
const char string2[LEN] =“This is a example!”;
char * cp;
cp = string2 ;
雖然這種方法必要笨拙,缺乏靈活性,但在特殊的情況下效率是比較高的.

2.宏的問題
一般情況下,不建議使用宏,因為宏破壞了程式的可讀性,特別是代碼中潛入很多宏的時候排錯就很麻煩! 但是如果在特殊的情況下,比如追求效率的情況下還是可以使用一下, 在一般情況下我們還是將這個工作交給編譯起來完成, 因為現代的編譯器會自動的把小函數或內嵌函式擴充為宏.(我一般只用宏來進行定義常數, 條件編譯工作).

3.採用數學的方法來最佳化程式
有時候這個問題常常被大家忽略, 對於沒有沒有經驗的程式員來說更是如此, 然而這個對效率的差別是巨大的,一個經典的例子就是:
求 1~100的和。
方法A:
int I , j;
for (I = 1 ;I<=100; I ++)
{
     j += I;
}
方法B:
int I;
I = (100 * (1+100)) / 2
很顯然這裡的差別也是巨大的, 方法B的代碼也更簡潔, 呵呵^_^,所以程式員數學不好那也是限制發展的一個因素!

4.使用位操作來代替乘法和除法
大家都知道乘法和除法在cpu中是不能直接進行的, cpu採用加法來現, 所以在適當的情況下我們要使用位移來實現乘法和除法.如
a=211/4; 也可以寫成a=211>>2;(這裡的適當時候,當然是運算式不是很複雜的時候, 如果需要都用位移來操作,那麼調程式的時候會痛苦死的^_^)!

5.彙編潛入
大家都知道在電腦裡,彙編是跑的最快的程式語言, 使用彙編可以時程式的效率提高一定的數量級, 但是所謂事物的兩面性, 使用彙編也減低的程式的可移植性, 而且很可能對程式造成巨大的破壞.建議是高手使用,而且也僅僅限與底層處理或效能要求非常苛刻的時候.如:
char string1[1024],string2[1024];
方法I
int I;
for (I =0 ;I<1024;I++)
*(string2 + I) = *(string1 + I)
方法J
#ifdef _PC_
int I;
for (I =0 ;I<1024;I++)
*(string2 + I) = *(string1 + I);
#else
#ifdef _ARM_
__asm
{
MOV R0,string1
MOV R1,string2
MOV R2,#0
loop:
LDMIA R0!, [R3-R11]
STMIA R1!, [R3-R11]
ADD R2,R2,#8
CMP R2, #400
BNE loop
}
#endif

注:這裡的例子代碼都載之www.vckbase.com網站!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.