C語言離不開函數, 使用函數也很方便, 但使用函數是有代價的;
特別是在反復調用時, 函數會因反復地壓棧、出棧而浪費一些時間.
下面是測試, 用函數與不用函數的時間分別是: 8秒、4秒!
1. 測試使用函數的代價:
#include <stdio.h>
#include <time.h>
int sum(int x) {
return x + x;
}
int main(void)
{
int count = 1000000000;
int i;
int num;
time_t start, stop;
time(&start);
for (i = 0; i < count; i++) num = sum(i);
time(&stop);
printf("調函數用時: %d 秒;\n", stop - start); /* 8 */
time(&start);
for (i = 0; i < count; i++) num = i + i;
time(&stop);
printf("非函數用時: %d 秒;\n", stop - start); /* 4 */
getchar();
return 0;
}
2. 使用內聯函數:
在函數頭上冠上 inline 關鍵字就是內聯函數了.
使用內聯函數可以讓函數得到優化, 所謂優化就是把函數嵌入到當前位置.
一般只可以考慮把較小的函數使用內聯, 因為這只是個申請, 編譯器不保證對所有的申請執行內聯.
內聯函數只能使用在被定義(而不是被聲明)的單元.
下面繼續使用了上面的例子(只添加了一個 inline) 測試.
測試了幾次, 基本還是上面的測試結果; 看來 C++Builder 2009 並沒有理會它.
#include <stdio.h>
inline int sum(int x) {
return x + x;
}
int main(void)
{
int count = 1000000000;
int i;
int num;
time_t start, stop;
time(&start);
for (i = 0; i < count; i++) num = sum(i);
time(&stop);
printf("調函數用時: %d 秒;\n", stop - start);
time(&start);
for (i = 0; i < count; i++) num = i + i;
time(&stop);
printf("非函數用時: %d 秒;\n", stop - start);
getchar();
return 0;
}
返回“學點C語言 - 目錄”