《Effective C++》学习笔记条款30 透彻了解inlining的里里外外
来源:互联网 发布:美工刀具磨刀生产设备 编辑:程序博客网 时间:2024/04/30 19:32
招致的额外开销。你实际获得的比想象的还多,编译器有能力对执行语境相关最优化。然而编写程序就像现实生活一
样,没有白吃的午餐。inline函数也不例外,这样做可能增加你的目标码。
如果inline函数的本体很小,编译器针对“函数本体”所产生的码可能比针对“函数调用”所产出的码更小。果真如
此,将函数inlining确实可能导致较小的目标码和较高的指令高速缓存装置击中率。
记住,inline只是对编译器的一个申请,不是强制命令。这项申请可以隐喻提出,也可以明确提出。隐喻方式是将
函数定义于class定义式内,这样的函数通常是成员函数,friend函数也可被定义于class内,如果真是那样,它们也是被
隐喻声明为inline。明确声明inline函数的做法则是在其定义式钱加上关键字inline。
Inline函数通常一定被置于头文件内,因为大多数建置环境在编译过程中进行inlining,而为了将一个“函数调用”替
换为“被调用函数的本体”,编译器必须知道那个函数长什么样子。
Template通常也被置于头文件内,因为它一旦被使用,编译器为了将它具现化,需要知道哦啊它长什么样子。
Template的具现化与inlining无关。如果你正在写一个template而你认为所有根据此template具现出来的函数都应
该inlined,请将此template声明为inline;但如果你写的template煤油理由要求它所具现的每一个函数都是inlined,就
应该避免将这个template声明为inline。
一个表面上看似inline的函数是否真实inline,取决于你的建置环境,主要取决于编译器。
有的时候虽然编译器有意愿inlining某个函数,还是可能为该函数生成一个函数本体(函数指针,构造函数,析构
函数)。
对程序开发而言,将上述所有考虑牢记在新很是重要,但若从纯粹实用观点出发,有一个事实比其它因素更重
要:大部分调试器面对inline函数都束手无策。
这使我们在决定哪些函数该被声明为inline而哪些函数不该时,掌握一个合乎逻辑的策略。一开始先不要将任何
函数声明为inline,或至少将inlining施行范围局限在那些“一定成为inline”或“十分平淡无奇”的函数身上。
请记住:
· 将大多数inlining限制在小型、被频繁调用的函数身上。这可使日后的调试过程和二进制升级更容易,也可使潜在的
代码膨胀问题最小化,是程序的速度提升机会最大化。
· 不要只因为function templates出现在头文件,就将它们声明为inline。
- 《Effective C++》学习笔记条款30 透彻了解inlining的里里外外
- Effective C++:条款30:透彻了解inlining的里里外外
- 《Effective C++》:条款30:透彻了解inlining的里里外外
- 读书笔记《Effective C++》条款30:透彻了解inlining的里里外外
- 条款30:透彻了解inlining的里里外外
- 条款30:透彻了解inlining的里里外外
- 条款30:透彻了解inlining的里里外外
- 条款30:透彻了解inlining的里里外外
- 条款30:透彻了解inlining的里里外外
- 条款30:透彻了解inlining的里里外外
- 《Effective C++》读书笔记之item30:透彻了解inlining的里里外外
- C++之透彻了解inlining的里里外外(30)---《Effective C++》
- 条款30 透彻了解inlining的里里外外
- 条款30:透彻了解inline的里里外外
- 透彻了解inline的里里外外——effective c++学习笔记
- 条款29-30:为“异常安全”而努力是值得的与inlining的里里外外
- inlining的里里外外
- [翻译] Effective C++, 3rd Edition, Item 30: 了解 inlining(内联化)的来龙去脉(上)
- scale_rt_power解析
- Delphi中文件名函数-路径、名称、子目录、驱动器、扩展名-
- to_number不了字段-ORA-01722 无效数字
- AsyncTask引发的问题
- 从零开始-边学边做-塔防游戏-七彩三国(八)--强制横屏
- 《Effective C++》学习笔记条款30 透彻了解inlining的里里外外
- 2013年12月30日星期一(继续流水线--局部坐标->世界坐标)
- [零基础学软件开发14]while循环
- excel2003如何删除重复的行
- 黑马程序员 知识点总结-Java集合框架(Map)
- Xcode中查看方法的调用者列表
- [DBNETLIB][ConnectionOpen(Invalid Instance())] 无效的连接 的解决办法
- guide
- C1083: Cannot open include file: ‘stddef.h’: No such file or directory