如何强制在 Visual C++ 的发布模式下创建函数 [重复]

Posted

技术标签:

【中文标题】如何强制在 Visual C++ 的发布模式下创建函数 [重复]【英文标题】:How do I force a function to be created in Release mode on Visual C++ [duplicate] 【发布时间】:2011-12-09 18:07:19 【问题描述】:

可能重复:Is it possible to force a function not to be inlined?

我有这个类方法,由于在 Visual C++ 上的发布模式下进行优化而实际上并没有创建(该函数只是“嵌入”在调用者函数中,没有适当的 prolog 和 epilog )。如何告诉编译器创建一个独立的函数?

【问题讨论】:

“内联”是通常使用的术语(与“嵌入”相对) 回答了这个问题:***.com/questions/3329214/… @Rhuidean 谢谢。请投票结束问题。 为什么需要这个?你真正想解决什么问题? 【参考方案1】:

你可以在 VC++ 中使用pragma

#pragma auto_inline(off)

void non_inlined_func()  /* ... */ 

#pragma auto_inline() // returns to previous state

见the documentation here。

【讨论】:

【参考方案2】:

这称为inline 函数。如果您要链接到该模块,则可以将实现移动到 cpp 文件,因此它在外部不可见。这样,任何试图使用它的模块都必须调用它。

您还可以禁用将编译器标志“内联函数扩展”设置为Only __inline (/Ob1),以防止在当前模块中出现inlining,假设您没有将其标记为inline

或使用:

#pragma auto_inline(off)
void foo()


#pragma auto_inline()

编辑:

我首先列出了我的第一个变体,因为这是正确的做法。您应该让优化器尽其所能来加速您的代码。如果它被内联在您自己的模块(或其他模块中,因为汇编代码仍然在您的二进制文件中可见)对您来说并不重要,但如果您确实必须这样做,请选择第一个选项。

【讨论】:

以上是关于如何强制在 Visual C++ 的发布模式下创建函数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章