内联函数 与 宏

 
目的:完全处于性能的考虑
机制:将被调用函数的函数代码直接地整个插入到函数被调用处
 
两种表现:
1.       关于类的成员函数
类外使用时,需要指定关键字inline
类内使用时,声明的同时提供函数体,inline不是必须的
2.       关于普通函数
需要加inline
 
原则:ODR原则,最好将内联函数都定义在一个头文件
 
优点:
1. 减少因为函数调用,主要是参数压栈,栈帧开辟与回收,以及寄存器的保存与恢复
2. 编译后, 代码集中,优化更彻底,(对最终代码优化可能更有贡献)
 
分析:
空间上:非内链函数代码只有一份,使用call指令调用
        内联函数每个被调用出都有一份代码拷贝。
 
如果内联函数自己的函数代码量比自己函数调用的准备与善后引入的代码量小,则内联后代码量将变小
 
时间上:内联函数调用的代码是相邻的,同一页面或者连续页面,降低缺页率
 
建议:内联函数最好在开发后期引入,避免大量编译时间
 
修改/维护:修改内联函数需要重新编译真个工程
 
特点:inline只是对编译器的一种建议
     
内联虚函数:由于虚函数是晚绑定的,编译期不知道函数属于哪个版本
 
可以内联的情况: 1.通过对象
                              2.指针/引用 编译器确定虚函数具体版本

 

==================================================

宏:                                                 内联函数:

1.由预处理器处理                            1.编译器处理

2.对++/--操作有副作用                     2.可能会被编译器拒绝(不一定内联)

3.难于调试                                       3.可能造成代码膨胀

4.必定被展开                                  

==================================================

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值