注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

函数调用过程与inline  

2014-12-11 11:12:31|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


函数调用实现过程:当程序执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到栈中(保留的内存块),跳到标记函数起点的内存单元,执行函数代码(这个过程也许还需要将返回值放入到寄存器中),然后跳回到地址被保留的指令处。在地址间来回跳跃会增加一定的开销,内联函数可以减少这种开销,但是这以增加内存为代价的。内联函数是去掉调用跳到定义函数处,而是用函数定义代码直接替换函数的调用代码块,所以,内联函数适用于经常被调用的函数,这个函数代码只有一行,且没有递归。

到这里,你可能联想到宏定义define了,没错,define是内联函数的原始实现,它只不过是简单的代码替换,功能远没有inline强大好用。比如说,inline可以通过传递参数来实现和函数一样的功能,但#define SUM(X,Y) ((X)+(Y))中的参数只是一个符号标记,并不是真正的参数,而且每个参数为了安全使用,都要加括号。

  评论这张
 
阅读(64)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017