本次更新的是内联函数,内联函数的出现主要是为了解决代码效率问题,也就是为了解决一些频繁调用的小函数大量消耗栈空间的问题。那么我们就来讲一下inline内联函数,本次主要通过用内联函数来对比普通函数进行讲解。
inline内联函数和普通函数的区别
开篇我们提到了内联函数能解决一些频繁调用小函数而造成大量消耗栈空间的问题,那么这里就有一个区别。
普通函数调用的时候,会造成栈空间的消耗,而内联不会。
我们通常把函数的调用过程称作函数的调用开销,函数的调用开销有参数压栈、函数栈帧的开辟和退回的过程。
inline内联函数:在编译过程中,就没有函数的调用开销,在函数的调用点直接把函数的代码进行展开处理,相当于把函数的代码全部复制过来,而不是普通函数那样跳转。同样内联函数也不会生成函数符号。
使用关键字inline只是对编译器发出建议,把这个函数设定为内联函数,而不是用了inline,这个函数就是内联函数了,比如递归函数不会被处理为内联函数,函数的代码过多,也不会被处理为内联函数
同时注意一点:debug版本上对代码进行运行,inline不起作用,inline只有在release版本才能出现,因为debug是对代码进行调试,调试时内联会造成调试失败,当然这是编译器需要考虑的问题,我们只用知道,内联函数生效只有在release版本中。
现在来总结一下区别:
普通函数有标准的函数调用开销。
内联函数是编译阶段,在函数调用点对函数代码的展开,省去了函数调用开销。如果这个函数在短时间调用多次,并且这个函数非常简单,我们就设置为内联函数。并不是加了inline就是内联函数,是否处理成内联函数由编译器决定。