内联函数调用推理
Inline function call reasoning
所以我正在对编译器进行一些实验(我在C++"职业生涯"中已经到了那个地步(,我注意到对_rotl
的调用是直接编译/组装的;我的意思是,与其说程序集执行call
,不如说(尽管只有 2 个(操作码似乎直接剪切/粘贴到调用所在的位置。
这背后的原因是什么?我相信这个术语是"内联函数",但我可能弄错了。
它不是一个内联函数,它是一个内在函数。 旨在利用目标处理器的特定功能。 它无条件地内联,而不以其他方式内联声明函数,通常只生成单个机器代码指令。 对于 _rotl((,使用 x86 ROL 指令。
C++ 中的 inline
关键字建议编译器将某些函数(通常为短函数(内联,以减少由汇编命令(处理器指令(引起的开销call
。
但是,这只是一个建议,因此其他未明确标记为inline
的短函数也可以内联,并且它也可以忽略您的内联请求,尤其是在函数非常大的情况下。
内联操作本身基本上将函数的主体复制到使用它的每个位置,而无需调用它。
您可以随时在谷歌上搜索它并找到更多信息。
编辑:内联通常只/大部分发生在优化打开的情况下;尝试打开和关闭它们并比较反汇编。
内联是为了提高效率。首先,它通过基本上"内联"插入功能来节省call
的成本。也就是说,创建该函数的副本并将其插入到调用的原始位置。其次,要执行的代码更紧密,由于空间局部性,这有助于缓存。
如果在循环中调用函数,则通常会内联函数,此时此开销变得更加重要。可以使用 inline
关键字向编译器提示您希望内联函数,但编译器没有义务这样做。有时可以使用特定于编译器的关键字来强制内联。例如,使用 VC++ __forceinline
。
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 成员函数调用和C++对象模型
- 使用共享指针的函数调用,其对象应为 const
- C++:编译时检查匹配的函数调用对?
- 函数调用C++中的参数太少
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 返回指向对象的指针的函数调用是否为 prvalue?
- C++ 如何重载 [] 运算符并进行函数调用
- 代码的效率. 转到和函数调用
- 是同一作用域的函数部分中的函数调用
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 内联函数调用推理