随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万


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;
}


posted on   万一  阅读(2085)  评论(3编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
历史上的今天:
2007-12-04 Delphi 快捷键
2007-12-04 上标、下标和引用
2007-12-04 Delphi 数据类型列表
2007-12-04 字符串的"大小"比较


点击右上角即可分享
微信分享提示