常规函数与内联函数的区别不在于编写方式,而在于编译器如何将他们组合到程序中。常规函数调用时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数赋值到堆栈,跳到标记函数起点的内存单元,执行函数代码,然后跳回到地址被保存的指令处。来回跳跃并记录跳跃位置意味着常规函数需要一定的开销。
内联函数则编译器将使用相应的函数代码替换函数调用(即直接展开),无需来回跳转。因此运行速度比常规函数快,但会占用较多内存。但如果执行函数代码比处理函数调用机制的时间长,则节省的时间只占很小一部分。故若定义占多行,则不太合适。相反,如果代码执行时间很短,或者经常被调用,则很有意义。
措施是在函数声明和函数定义前加上关键字inline。通常是省略原型,将整个定义放在本应提供声明的地方(例如.h文件中)。格式如下:
inline double square ( double x) { return x * x;}
内联函数的原始实现实际上是#define提供宏。
新闻热点
疑难解答