内联函数和普通函数

普通函数:

普通函数调用时会使程序跳到另一个地址(函数的地址),并且在函数结束时返回。

  • 执行函数调用指令,立即存储该指令的地址,并将函数参数保存到的堆栈。
  • 跳到函数起点的内存单元,执行函数代码(将返回值保存到寄存器中。
  • 跳回被保存指令的地址处。

来回跳跃并记录跳跃位置意味着使用普通函数时,需要一定的开销。

内联函数:

内联函数就是 编译器将使用相应的函数代码代替了函数调用,所以内联函数的运行速度比普通函数快,但代价是占用了更多的内存。 (以空间换时间,内联函数不是在调用时发生控制转移,而是在编译时用函数体替换函数调用,从而节省了参数传递、控制转移等开销)

内联函数存在的意义就是为了提高程序运行的速度,提高程序的执行效率,但并不是所有加上inline关键字的函数都是内联函数,编译器会识别该函数的复杂程度,若过于复杂,即使被声明为内联函数,编译器也会按照普通函数去处理;若函数比较简单,即使没有声明为内联函数,编译器也会按照内联函数处理。

  • 内联函数中不能有循环语句和Switch语句;
  • 内联函数的定义必须出现在内联函数第一次被调用之前
  • 对内联函数不能进行异常接口声明

选择使用内联函数?

  • 如果代码执行时间很短,这使得非内联调用的时间显得占比大。则内联调用就可以节省大部分时间。
  • 如果该函数多次使用,如果要求速度,就用内联函数;要求内存,就用普通函数调用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值