内联函数与C语言函数调用有什么区别??

 我来答
百度网友6fa3859
2016-02-27 · TA获得超过3349个赞
知道小有建树答主
回答量:1148
采纳率:85%
帮助的人:414万
展开全部
  首先讲一下函数调用,C语言函数调用的过程是:
  ①将参数压栈,一般是从右往左。
  ②使用call指令,调用函数。call指令会将当前指令所在的内存位置压栈以便函数结束后返回。
  ③进入函数体(跳转到另一块内存中),执行,执行完后,使用通用寄存器或者栈来存储返回值,使用ret指令返回。
  可以看到,函数调用是发生了跳转的,考虑一下跳转大小和指令预取这些东西,调用函数会加长执行时间。如果只是调用几次,时间差异可能感觉不出来,不是特别情况也不需要在乎。但函数被反复调用时,性能就会差很多。
  所以有了内联函数这玩意,编译器会直接将对内联函数的调用扩展为整个函数的代码(几种情况除外,这个看书,我也记不住),也就是说,不会使用call和ret指令。所以,这样做的缺点就是每个调用函数的位置都被扩展成了函数的代码,会加大生成的可执行文件的大小。所以才会提倡,将调用频繁而函数本身却很小的函数声明为内联函数。
  它们的区别就在这里,跳转和不跳转,牺牲时间还是牺牲空间。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式