我有这个类方法,由于在Visual C ++上的Release模式中进行了优化,实际上并没有创建(该函数只是在调用函数中“嵌入”,没有正确的prolog和epilog)。如何告诉编译器创建独立函数?
答案 0 :(得分:4)
您可以在VC ++中使用pragma
#pragma auto_inline(off)
void non_inlined_func() { /* ... */ }
#pragma auto_inline() // returns to previous state
答案 1 :(得分:3)
这称为inline
函数。如果您要链接该模块,可以将实现移动到cpp
文件,因此它在外部不可见。这样,任何试图使用它的模块都必须调用它。
您也可以禁用将编译器标志“内联函数扩展”设置为Only __inline (/Ob1)
以阻止当前模块中的inlining
,假设您没有将其标记为inline
。
或使用:
#pragma auto_inline(off)
void foo()
{
}
#pragma auto_inline()
我首先列出了我的第一个变体,因为这是正确的方法。您应该让优化器尽其所能来加速代码。如果它在你自己的模块中被内联(或者其他的,因为汇编的代码在你的二进制文件中仍然可见),这对你来说无关紧要,但是如果你真的必须这样做,那就选择第一个选项。