深入到计算机的本质,其实,很多东西还是细节需要深入分析的,比如我最近的一份工作
内联函数和宏很类似,都是以空间换时间,都能一定程度上加快程序的执行。而区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。当然,内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。
简而言之,两者的区别如下:
1.宏定义是在预处理阶段由预处理器替换,内联函数是在编译时编译器执行。
2.内联函数还是有函数的特性,而宏定义真的只是简单的字符串替换,容易出现一些问题。
下面给出一份测试他们速度的代码:
#include <stdio.h> #include <time.h> #define NUM(x) x*x*x static inline int num_test(int x) { return x*x*x; } static int array[32]; int main() { int test = 0xEFFFFFFF; int cnt = 0; long long num = 0,num1 = 0; clock_t start, finish; double duration; start = clock(); while(cnt++ < 10000) { num += NUM(cnt); } finish = clock(); duration = (double)(finish - start) / CLOCKS_PER_SEC; printf( "%f seconds \n\t", 1000*duration ); cnt = 0; start = 0, finish = 0; start = clock(); while(cnt++ < 10000) { num1 += num_test(cnt); } finish = clock(); duration = (double)(finish - start) / CLOCKS_PER_SEC; printf( "%f ms seconds \n\t", 1000*duration ); printf("num:%d num1:%d \n\t",num, num1); return 0; }
具体的运算时间就需要你自己运行一下了,笔者只是知道,这个速度是几乎没什么差别的,就看你怎么用了,什么具体的场景使用什么了。
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2018-01-12 python实现桶排序算法