jke*_*eys 9 c++ compiler-theory compiler-optimization
我知道你可以使用inline关键字,或者只是将一个方法放在类声明ala short ctor或getter方法中,但编译器是否最终决定何时内联我的方法?
例如:
inline void Foo::vLongBar()
{
//several function calls and lines of code
}
Run Code Online (Sandbox Code Playgroud)
如果编译器认为它会使我的代码效率低下,它会忽略我的内联声明吗?
作为一个副作用,如果我在我的类之外声明了一个getter方法,如下所示:
void Foo::bar() { std::cout << "baz"; }
Run Code Online (Sandbox Code Playgroud)
编译器是否会在内幕中内联这个内容?
Jar*_*Par 15
是的,是否内联代码的最终决定权在于C++编译器.内联关键字是建议,而不是要求.
以下是有关如何在Microsoft C++编译器中处理此决策的一些详细信息
小智 10
在一天结束时,是否内联函数完全取决于编译器.通常,函数在流程方面越复杂,编译器内联它的可能性就越小.而一些函数,如递归函数,根本无法内联.
不内联函数的主要原因是它会大大增加代码的整体大小,从而防止iot被保存在处理器的缓存中.事实上,这将是一种悲观,而不是一种优化.
至于让程序员决定在脚下或其他地方拍摄自己,你可以自己内联函数 - 编写函数中已经存在的函数调用站点的代码.
正如其他人所指出的,inline关键字只是建议编译器内联代码。由于编译器通常会内联尚未标记的代码,而不是已标记的内联代码,因此该关键字似乎与or (C++0x 之前的版本)inline一样冗余。registerauto
但是,关键字还有另一件事:它将函数的链接从external(函数的默认设置)inline更改为inline。内联链接允许每个编译单元包含其自己的目标代码副本,并让链接器从最终可执行文件中删除冗余副本。如果这让您想起模板,是的,模板也使用内联链接。
| 归档时间: |
|
| 查看次数: |
5386 次 |
| 最近记录: |