C语言中 内联函数的速度快于普通函数,普通函数存在的作用是?为什么不都用内联函数代替?
展开全部
内联会进行代码调换,类似于宏替换那种,而且是由编译器判断的,你自己inline都未必会真的内联
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
内联函数类似于宏,如果编译器将这个函数当做内联函数来处理(内联函数只是建议编译器这样处理而已,而非一定),那么这个函数的代码在调用的地方展开,像宏定义一样。
所谓的速度更快是它省去了调用函数的一些开销,比如建立新的栈帧等。虽然这样确实减少了一定的时间开销,但是会造成函数代码的体积增大。
因为这个内联函数在调用它的地方展开了。所以会产生重复的代码,如果调用的地方比较多,因为只是替换那么重复的代码会更多,导致整个程序臃肿,一方面增大内存的负担,另一方面因为代码的执行是将代码移动到cache,cpu再执行cathe里的代码,因此代码的臃肿会导致cathe的hit几率下降,cathe会又从主存中加载指令。。严重影响时间效率。
因此,对于小型短小的函数可以使用内联来提高速率,但是长了反而会拖慢效率,这时适用普通函数。
所谓的速度更快是它省去了调用函数的一些开销,比如建立新的栈帧等。虽然这样确实减少了一定的时间开销,但是会造成函数代码的体积增大。
因为这个内联函数在调用它的地方展开了。所以会产生重复的代码,如果调用的地方比较多,因为只是替换那么重复的代码会更多,导致整个程序臃肿,一方面增大内存的负担,另一方面因为代码的执行是将代码移动到cache,cpu再执行cathe里的代码,因此代码的臃肿会导致cathe的hit几率下降,cathe会又从主存中加载指令。。严重影响时间效率。
因此,对于小型短小的函数可以使用内联来提高速率,但是长了反而会拖慢效率,这时适用普通函数。
追问
但是如果只在一个循环中用内联函数,你说的问题是否能解决,毕竟只展开一次
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询