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

如题所述

速度是有代价的,inline和宏都是用空间换时间。

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

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

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

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

4.对内联函数不能进行异常的接口声明。追问

但是如果只在一个循环中用内联函数,空间占用的问题是否就解决了?毕竟只展开一次

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-21
内联会进行代码调换,类似于宏替换那种,而且是由编译器判断的,你自己inline都未必会真的内联
第2个回答  推荐于2016-07-17
内联函数类似于宏,如果编译器将这个函数当做内联函数来处理(内联函数只是建议编译器这样处理而已,而非一定),那么这个函数的代码在调用的地方展开,像宏定义一样。
所谓的速度更快是它省去了调用函数的一些开销,比如建立新的栈帧等。虽然这样确实减少了一定的时间开销,但是会造成函数代码的体积增大。
因为这个内联函数在调用它的地方展开了。所以会产生重复的代码,如果调用的地方比较多,因为只是替换那么重复的代码会更多,导致整个程序臃肿,一方面增大内存的负担,另一方面因为代码的执行是将代码移动到cache,cpu再执行cathe里的代码,因此代码的臃肿会导致cathe的hit几率下降,cathe会又从主存中加载指令。。严重影响时间效率。
因此,对于小型短小的函数可以使用内联来提高速率,但是长了反而会拖慢效率,这时适用普通函数。追问

但是如果只在一个循环中用内联函数,你说的问题是否能解决,毕竟只展开一次

本回答被提问者采纳
相似回答