学点 C 语言(39): 函数 - 使用函数的代价与内联函数(inline)

180it 2020-03-05 AM 1652℃ 0条

学点 C 语言(39): 函数 - 使用函数的代价与内联函数(inline)

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;

}

  1. 使用内联函数:

在函数头上冠上 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;

}

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

学点 C 语言(39): 函数 - 使用函数的代价与内联函数(inline)