如何在 Visual C++ 上强制在发布模式下创建函数
How do I force a function to be created in Release mode on Visual C++
可能的重复项:
是否可以强制函数不内联?
我有这个类方法,由于在 Visual C++ 上的发布模式下进行了优化,它实际上并没有被创建(该函数只是"嵌入"在调用者函数中,没有适当的 prolog 和 epilog(。如何告诉编译器创建独立函数?
您可以在 VC++ 中使用pragma
#pragma auto_inline(off)
void non_inlined_func() { /* ... */ }
#pragma auto_inline() // returns to previous state
请参阅此处的文档。
这
称为inline
函数。如果要链接到该模块,则可以将实现移动到cpp
文件,这样它就不会在外面可见。这样,任何尝试使用它的模块都必须调用它。
您还可以禁用将编译器标志"内联函数扩展"设置为Only __inline (/Ob1)
以防止当前模块中的inlining
,前提是您没有将其标记为inline
。
或使用:
#pragma auto_inline(off)
void foo()
{
}
#pragma auto_inline()
编辑:
我首先列出了我的第一个变体,因为这是正确的方法。您应该让优化器尽其所能来加速您的代码。它是否内联在你自己的模块中(或其他模块,就此而言,因为组装好的代码在你的二进制文件中仍然可见(,这对你来说并不重要,但如果你真的必须这样做,请选择第一个选项。
相关文章:
- C++ 'srand()' 函数产生模式?
- 简化C++包括变量名称和函数输出的模式
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 为什么 c++11 std::normal_distribution 在从函数调用时返回相同的模式?
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- assert() 在发布模式下充当标识函数吗?
- 删除使数据处于"错误状态"的默认构造函数的模式?
- sql记录集函数的状态设计模式
- Singleton模式中的手动析构函数调用:调用多次
- 虚拟模板函数:使用参数实现访客模式
- 反射 + 函数指针与观察者模式
- 使用宏替换工厂模式样式 API 中的"create()"函数
- 在模板生成器模式中分解重复的构造函数调用
- 这是在调用函数中重用 C++11 lambda 的明智模式吗?
- 我如何实现变异模式以将可变数量的参数转发到C 11中的函数
- 为什么"S x({})"仅在GCC 7/C++1z模式下调用默认构造函数?
- 模式匹配函数的时间测量无法正常工作
- 使用递归的c++数字模式函数
- 我应该在openMP并行区域(for循环,任务)内使用gnu并行模式函数吗?