- 函数调用的成本:堆栈操作,包括函数地址以及变量的保存等等。inlining函数可以通过将函数体直接内嵌到调用该函数的函数内部,因此可以不用支付这一成本。
- 但是这回造成代码量的增大,inlining造成的代码膨胀亦会导致额外的换页行为,降低指令高速缓冲装置的命中率,而造成效率的降低。
- inlining在大多数程序中是编译器行为。
- 编译器拒绝inlining的情况:循环、递归、virtual、通过函数指针而非函数名。一般会给一个警告信息。
- 类的构造函数和析构函数并不是inlining的好的候选,即使你定义的构造或者析构函数很简单,编译器也会在编译过程中将其扩大很多。
- inline函数无法随着程序库的升级而升级。一旦程序库设计者决定改变inline函数,所有用到该函数的客户端程序都需要重新编译。
- inline函数不支持调试。
- inline函数必须放在头文件之中,一方面考虑到在所有调用它的文件中其定义必须相同,另一方面c++规定调用inline的文件中一定要有该函数的定义。
条款30:透彻了解inlining的里里外外
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 《Effective C++ 中文版 第三版》读书笔记 ** 条款 30:透彻了解 inlining 的里里外外 ...
- 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
- 我觉得在这里应该首先介绍一下到底啥叫内联?所谓内联就是在编译期在函数调用点上将函数本体复制过来并在函数调用点上展开...