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

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

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

【问题讨论】:

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

标签: c++ visual-c++


【解决方案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()
    

    编辑:

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

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多