C++内联函数

内联函数的定义

内联函数一般用于类的成员函数:
1.当类的成员函数在类中直接定义时就会自动成为内联函数(虚函数除外)
2.当内联函数的声明和定义分开时,声明时要加上inline关键字

内联函数的作用

内联函数在作用上和宏定义相同,在编译时将函数体直接插入调用处。目的是为了减少函数调用所花费的时间,提高运行速度,是一种用空间换时间的方法。
但内联函数相比于宏定义有着更大的优点:区别于宏定义,内联函数是一个真正的函数它编译器在调用内联函数时可以检查参数类型,而宏定义则不会。

内联函数的实质

内联函数,inline关键则并不是一种命令而是一种请求,对编译器的请求,编译器会根据内联函数函数体的复杂程度选择是否回应请求。
一般带有循环,switch语句,递归等复杂操作的函数编译器是不会内联的

插入:函数调用的过程

谈到函数调用就需要明确两个指针,一个结构:
栈指针:esp
帧指针:ebp
栈帧:为单个过程分配的栈称为栈帧
帧指针ebp指向过程的起始位置
栈指针esp指向过程的结束位置
栈指针esp可以移动。
帧指针不移动。
#函数调用前的准备:保护现场
1.保存调用者的栈帧结构
将当前帧指针ebp压栈(保存调用者当前的执行位置)
2.调整帧指针到当前栈指针的位置
3.保存寄存器中的内容
#执行函数
1.参数实例化
2.将被调函数的函数体压栈
2.移动ebp和esp形成新的栈帧结构:
将栈指针esp指向被调函数结束地址
3.执行函数体
4.return一个返回值
#恢复现场
1.回复寄存器的值
2.释放被调者的栈帧结构(将栈指针指向当前的帧指针即可)
3.恢复调用者的栈帧结构:
实质上时恢复栈指针和帧指针,其中栈指针已经恢复,只需将压栈的帧指针弹出即可。
4.继续执行调用者程序
#调用过程中的栈帧结构:

栈帧指针说明栈结构
ebp->此处发生函数调用
调用者栈帧结构
esp->原栈顶
ebp的值
寄存器的值
ebp‘->被调函数的第一条程序
被调用者栈帧结构
esp’->栈顶
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值