透彻了解inlining的里里外外
首先我们必须明白内联函数是什么,程序可以调用他们又不蒙受函数调用所带来的额外开销,将函数的调用替换为函数本体。
在这里我们必须注意的一些点:
1.我们内联函数的本体很小,编译器针对内联函数所产生的码可能比函数调用所产生的码更小。但是如果内联函数的本体过大,每一次函数调用都会导致函数本体替换其调用,如果函数被频繁调用,是可能造成代码膨胀的。(尤其是模板Inline函数)
2.虚函数是不能被inline化的,因为虚函数是运行期的行为,内联是编译期的行为。
3.函数指针的调用不能被内联化,因为内联函数当然没有地址的说法。
4.构造函数的内联需要注意,并不是空的构造函数就要写成内联,因为构造函数还默默调用了基类的构造函数并且初始化了类成员。
5.内联函数的修改,可能会造成大量文件的重新编译,但是函数本体的修改往往只造成重新连接。如果采用动态连接,升级函数甚至可以不知不觉地被应用程序所吸纳。