温馨提示
本文最后更新于 天前,其中的信息可能已经有所发展或是发生改变。
目录
内联函数的定义
在c++中使用inline 关键字来定义内联函数如下所示
inline PanelLogModel& getLogModel(const int serverUid);内联函数的好处
- 内联函数可以减少函数调用的开销。通常调用一个函数需要进行栈操作、参数传递、返回值处理等,这些步骤会产生一些开销。内联函数通过将函数体直接替换到调用点,可以消除这些开销。
- 对于一些小而频繁调用的函数,内联化可以显著提高性能。这种情况下,减少的调用开销可能会带来更好的执行速度。
- 编译器在内联展开后可以更好地进行优化,比如删除一些不必要的代码,甚至可以将内联函数中的代码与周围的代码进行更紧密的优化。
缺点
- 代码膨胀(Code Bloat):
- 内联函数的代码会在每个调用点被复制一份,如果函数体很大或者被频繁调用,这可能导致生成的二进制文件体积增大。过大的代码膨胀可能会导致缓存效率降低,从而影响性能
- 内联并非总是有效:
- 对于复杂函数,即使你标记为
inline,编译器可能会忽略内联建议而选择保留函数调用,因为它认为内联展开反而会带来负面影响。
- 对于复杂函数,即使你标记为
- 调试困难:
- 内联函数可能会使调试变得复杂,因为内联展开后的代码没有明显的函数边界,可能会使跟踪和定位问题变得困难
应该在什么时候使用内联函数?
- 适合小函数:对于那些非常短小(如几行代码)的、且频繁调用的函数,可以考虑使用内联。
- 避免复杂函数内联:如果函数非常复杂或调用频率不高,使用内联可能反而会影响性能,增加二进制文件大小。
- 依赖编译器优化:现代编译器通常有自己的优化策略,会自动决定是否内联某个函数,所以你不必过度担心。只要你用得合适,编译器会为你做出最优的选择。
关于内联函数的注意事项
- 在函数定义与实现分开的地方内联函数的实现需要放在头文件里面,不然编译器无法正常链接,why?
- 内联函数的特点:编译器需要在编译每个使用内联函数的地方时,看到函数的完整定义。这是因为编译器需要在编译阶段将函数调用替换为内联函数的代码。如果定义在
.cpp文件中,其他编译单元看不到函数的定义,就无法进行内联替换。 - 头文件和内联:头文件会被多个源文件包含,这样编译器就能在每个编译单元看到内联函数的实现,从而正确地处理内联化。
- 内联函数的特点:编译器需要在编译每个使用内联函数的地方时,看到函数的完整定义。这是因为编译器需要在编译阶段将函数调用替换为内联函数的代码。如果定义在
希望我的博客能够对你有帮助

评论
评论区还没开放,部署评论服务后就能留言啦~