本文最后更新于325 天前,其中的信息可能已经过时,如有错误请联系作者
了解inline 内联函数
当函数体非常小,而被频繁调用时,函数调用的开销可能会成为性能瓶颈。在这种情况下,使用内联函数可以避免函数调用的开销,因为内联函数在编译时会在调用点展开函数体,而不是通过函数调用的机制。这样,在汇编代码中就不会生成函数表和函数符号,从而减少了压栈、跳转和返回等操作的开销。
我们将函数指定为内联函数,通常就是将它在每个调用点上内联的展开。
inline int add(int a, int b) {
return a + b;
}
int main() {
int result = add(1, 2);
return 0;
}
编译器会将在main
函数中调用add
的地方替换为add
函数体的内容,即result = 1 + 2;
。
注意:内联说明只是向编译器发出的一个请求,编译器可以忽略这个请求。例如,如果一个函数是虚函数、体积过大、或者涉及到递归调用。Forceinline一般是在函数体积较大时使用,对于其他情况仍然不会内联。