函数内联 inline,__inline,__forceinline

Posted cuancuancuanhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数内联 inline,__inline,__forceinline相关的知识,希望对你有一定的参考价值。

? 感谢大佬的总结【http://www.cnblogs.com/xuemaxiongfeng/articles/2464850.html

● 存储限定符 __inline 与关键字 inline 的语义完全相同,不影响函数的类型,建议编译器在合理的情况下内联编译 C/C++ 函数

内联减少了函数调用的开销,但却增加了代码量

inline 仅用于 C++,__inline和 __forceinline 用于 C/C++

编译器处理内联的情况:

  ■ 使用 /clr 编译选项时,如果函数使用了安全属性,则不会进行内联

  ■ 类定义的同时定义其成员函数,则默认内联,否则也可使用 inline 指定内联

   使用__forceinline关键字,但内敛失败,则给出 level 1 警告

 

__forceinline 强制内联,不基于编译器的性能和优化分析而依赖于程序员的判断,仍不能内联的情况:

  ■ 函数或其调用者使用 /Ob0 编译器选项(Debug模式默认选项)

  ■ 函数和其调用者使用不同类型的异常处理。

  ■ 函数具有可变数目的参数

  ■ 函数使用了在线汇编(__asm{...}),但若开启编译选项 /Og,/Ox,/O1,/O2 则仍能内联

  ■ 是虚函数并且是虚调用,但虚函数的直接调用可以内联

  ■ 使用函数指针来对该函数进行调用

  ■ 函数被关键字 __declspec(naked) 修饰


 


以上是关于函数内联 inline,__inline,__forceinline的主要内容,如果未能解决你的问题,请参考以下文章

c++: inline_函数与内联函数(超详细)

gcc悄无声色将静态函数内联了

调用 always_inline '_mm256_add_epi32' 时内联失败:目标特定选项不匹配 [重复]

关于C++内联函数

内联函数

调用 always_inline '__m128i _mm_cvtepu8_epi32(__m128i)' 时内联失败:目标特定选项不匹配 _mm_cvtepu8_epi32 (__m128i __X