C++内联函数inline

内联函数

定义与使用

常规函数的调用过程

  编译过程的最终产品是可执行程序–由一组机器语言指令组成。运行程序时,操作系统将这些指令载入到计算机内存中,因此每一条指令都有特定的内存地址。有时,比如说遇到循环或者判断语句,会跳过一些指令,向前或向后跳到特定的地址。常规函数调用也使得程序跳转到下一个地址–函数的地址,并在函数结束时返回。

  更具体的过程是执行到函数调用的指令的时候,程序会立即把这个函数调用的指令的地址存储起来,将函数的参数存到堆栈中,然后跳转到标记函数起点的内存单元,逐步执行函数体,如果函数有返回值的话,还会将返回值放到寄存器里。随后调回到之前存储的指令地址,继续执行下一个指令。这就好比是正在阅读一本书,阅读的过程中突然遇到了脚注,然后标记一下,转而去阅读脚注,阅读完之后再回到之前标记的地方继续阅读。

  对于比较大型的程序,函数的调用往往存在千百万甚至上亿次,这每一次的跳转都需要造成一些系统的开销,最终影响整个系统的性能。当然,对于平常个人工程实践里的小型代码来说,由于现在PC的性能普遍还可以,所以这些开销基本上可以忽略不计。当然,对于C语言来说,一些经常用到的函数,往往采用宏定义进行预编译来减少这种跳转的开销。比如编写一个程序做一些数学运算,往往类似乘方,开根号这些函数被经常用到,在程序最开头加上“#define SQUARE1(x) xx”,这样程序在遇到SQUARE(x)的时候,就会自动转换成xx,然而这样做本质上只是一种文本替换,从下面的分析中你能看到它所面临的困境,而使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值