程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 學點C語言(39):函數 - 使用函數的代價與內聯函數(inline)

學點C語言(39):函數 - 使用函數的代價與內聯函數(inline)

編輯:關於C語言

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語言 - 目錄”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved