关于内联函数

flycat1 2002-07-17 03:06:44
小弟对内联函数的作用不是很明白,为什么要使用内联函数以及在什么情况下需要使用它呢,希望各位大侠能帮帮我。
...全文
39 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangcanhui 2002-07-18
  • 打赏
  • 举报
回复
内联函数主要是在编译时将函数调用指针与函数体相连接,提高运行的效率,但以
占用内存为代价
born_in70s 2002-07-18
  • 打赏
  • 举报
回复
>> you can get address of an inline function.

的确, 因为被inline 的函数体仍作为一个编译单位存在. 编译器视
情况决定是否在函数调用处将其inline 进来. 如果我们通过函数指针
来调用这个函数, 那这个调用肯定不会被inline 了.
elvahuang 2002-07-18
  • 打赏
  • 举报
回复
gz
ajoo 2002-07-18
  • 打赏
  • 举报
回复
No, you can get address of an inline function.
It is only a suggestion to the compiler, not a command.
hellwolf 2002-07-18
  • 打赏
  • 举报
回复
编译器看情况
如果出现递归的话,编译器可不会知道函数何时结束,所以就避开内联即使用inline关键字
bestone 2002-07-18
  • 打赏
  • 举报
回复
需要取函数的地址时也不可以用内联函数。
inevity 2002-07-18
  • 打赏
  • 举报
回复
inline函数确实比c中的宏好。他既有类型检查,有没有函数调用的堆栈的建立与返回的开销。编译器不过是copy了一份inline代码。当然若这个line函数过大,会占据很大的内存,得不偿失。在类中的成员函数,编译器已默认为inline的了。
maoxianwang 2002-07-18
  • 打赏
  • 举报
回复
有收获
ajoo 2002-07-18
  • 打赏
  • 举报
回复
don't have to use inline. Compiler can do inlining better than you can.
So why bother?
glassshark 2002-07-17
  • 打赏
  • 举报
回复
1。在速度要求比较快的场合使用,但要求函数规模比较小,使用比较频繁。
2。编译器将去掉出入栈的调用及清理代码,加快函数调用。
3。在利用合理时将减少代码规模,如代码量小于出入栈及清理代码时。
4。在循环及递归中最好不要使用,而且递归中不可能是内联的,因为递归的规模(即函数调用次数)在编译时是无法确定的,所以不可能将其替换成确定次数的函数体代码。
5。是否实现内联全由编译器最终决定,你的说明只是一个“建议”,编译器将根据其内在规则(取决于具体编译器的具体实现)来确定是否实现内联。
6。比宏定义好,可以真正实现类型检查,而且不会有宏调用参数的副作用。
7。在类中使用比较多,如果在类说明中直接定义函数体,编译器即视你说明了一个内联函数,但有关规则同上。
8。其它,记不起了。
born_in70s 2002-07-17
  • 打赏
  • 举报
回复
inline 尤其对 C++ 代码的优化有好处.
fanqing 2002-07-17
  • 打赏
  • 举报
回复
内联函数就是使每个对象都有内联函数的一个副本,非内联就是当对象用这个函数通过连接连接此函数.
rediori 2002-07-17
  • 打赏
  • 举报
回复
不过inline大部分是由编译器决定的
编译器一般不会允许一个很大的函数内联,即使你声明了是inline
但一些没有声明的函数, 但是调用了次数很多的情况下编译器会设置为内联
司马青衫依旧 2002-07-17
  • 打赏
  • 举报
回复
前面两位virginsoldier(北欧野马——哈根) 和 fangrk(加把油,伙计!)老兄说得很对!

内联函数,常常用于该函数代码短小,而经常被调用;这样每次调用的花销很大(虽然函数很小,但是调用时要保存此时的环境如堆栈等,而函数返回又要恢复)。为了避免这种不协调,才有了内联函数。
我觉得他似乎就像“宏”,只是把函数的代码插入的调用的地方,并不是真正的函数调用。(这种比喻不知道妥当否)
Faccey 2002-07-17
  • 打赏
  • 举报
回复
内联函数确实可以提高效率,因为和一般的函数调用相比,省去了调用和返回的时间,但是它不能在需要被频繁调用的场合下使用,那会使程序大小急速膨胀,比如在递归调用中
司马青衫依旧 2002-07-17
  • 打赏
  • 举报
回复
前面两位virginsoldier(北欧野马——哈根) 和 fangrk(加把油,伙计!)老兄说得很对!

内联函数,常常用于该函数代码短小,而经常被调用;这样每次调用的花销很大(虽然函数很小,但是调用时要保存此时的环境如堆栈等,而函数返回又要恢复)。为了避免这种不协调,才有了内联函数。
我觉得他似乎就像“宏”,只是把函数的代码插入的调用的地方,并不是真正的函数调用。(这种比喻不知道妥当否)
Faccey 2002-07-17
  • 打赏
  • 举报
回复
内联函数确实可以提高效率,因为和一般的函数调用相比,省去了调用和返回的时间,但是它不能在需要被频繁调用的场合下使用,那会使程序大小急速膨胀,比如在递归调用中
Hmilu 2002-07-17
  • 打赏
  • 举报
回复
我也来学学!
bluedodo 2002-07-17
  • 打赏
  • 举报
回复
到底是用"宏"还是用"INLINE",其实我认为都有它的好处,但我还是认为少用为好,除非它给你带来的益处能抵消因内联函数所带来体积增大的开销.
earthharp 2002-07-17
  • 打赏
  • 举报
回复
inline 函数有一套复杂的运作,我正有意思看看。
加载更多回复(2)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧