C语言中 内联函数的速度快于普通函数,普通函数存在的作用是?为什么不都用内联函数代替?

 我来答
flower
2015-11-21 · 爱生活,爱分享
flower
采纳数:94 获赞数:262

向TA提问 私信TA
展开全部
速度是有代价的,inline和宏都是用空间换时间。

使用内联函数的时候要注意:

1.递归函数不能定义为内联函数

2.内联函数一般适合于不存在while和switch等复杂的结构且只有1~5条语句的小函数上,否则编译系统将该函数视为普通函数。

3.内联函数只能先定义后使用,否则编译系统也会把它认为是普通函数。

4.对内联函数不能进行异常的接口声明。
追问
但是如果只在一个循环中用内联函数,空间占用的问题是否就解决了?毕竟只展开一次
liukanges
2015-11-21 · TA获得超过453个赞
知道答主
回答量:39
采纳率:0%
帮助的人:20.9万
展开全部
内联会进行代码调换,类似于宏替换那种,而且是由编译器判断的,你自己inline都未必会真的内联
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
free逍遥星空
推荐于2016-07-17 · TA获得超过344个赞
知道小有建树答主
回答量:231
采纳率:100%
帮助的人:202万
展开全部
内联函数类似于宏,如果编译器将这个函数当做内联函数来处理(内联函数只是建议编译器这样处理而已,而非一定),那么这个函数的代码在调用的地方展开,像宏定义一样。
所谓的速度更快是它省去了调用函数的一些开销,比如建立新的栈帧等。虽然这样确实减少了一定的时间开销,但是会造成函数代码的体积增大。
因为这个内联函数在调用它的地方展开了。所以会产生重复的代码,如果调用的地方比较多,因为只是替换那么重复的代码会更多,导致整个程序臃肿,一方面增大内存的负担,另一方面因为代码的执行是将代码移动到cache,cpu再执行cathe里的代码,因此代码的臃肿会导致cathe的hit几率下降,cathe会又从主存中加载指令。。严重影响时间效率。
因此,对于小型短小的函数可以使用内联来提高速率,但是长了反而会拖慢效率,这时适用普通函数。
追问
但是如果只在一个循环中用内联函数,你说的问题是否能解决,毕竟只展开一次
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式