c++ - 有选择地省略 MSVC 中的帧指针

标签 c++ gcc visual-c++

在 GCC 中,我可以有选择地为特定函数设置优化标志,因此:

void func() {}

生成:

func():
    push    rbp
    mov     rbp, rsp
    nop
    pop     rbp
    ret

还有这个:

__attribute__((optimize("-fomit-frame-pointer")))
void func() {}

生成:

func():
        nop
        ret

我如何在 visual studio 中做同样的事情?

最佳答案

编译器有一个命令行参数,/Oy,这使得编译器忽略帧指针。您可以使用 #pragma 实现相同的效果:

#pragma optimize("y", on)

int foo(int a) { // foo will be compiled with omitted frame pointers
    return a;
}

#pragma optimize("y", off)

此处,foo() 将使用省略的帧指针进行编译。

注意:如我所见,您必须构建一个优化的构建才能使该选项生效。因此,要么向编译器提供一些优化标志(如“/Og”),要么在编译指示中包含“g”:#pragma optimize("gy", ...)

(我已使用 Visual Studio 2015 对此进行了检查)

关于c++ - 有选择地省略 MSVC 中的帧指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44695947/

相关文章:

c++ - std::bind 编译器错误 gcc

c++ - 将 using tr1::shared_ptr 放在 header 中的命名空间 std 中是否合法?

visual-c++ - Visual-C++ 和 gcc 之间宏 ## 连接运算符的差异

c++ - 错误 C2893 : Failed to specialize function template VC++ 2012

C++ 运行 SHELLEXECUTEINFO 并附加功能名称

c - 如何使用 ia16-elf-g++ 编译器生成 fpu 代码(未模拟)?

gcc - 当我配置 ctags-5.8 时有未声明的标识错误

c++ - 为什么游戏引擎更喜欢静态库而不是动态链接库

c++ - G++ log10(浮点) log10(双)

c++ - 我可以使用 Poco 从内存缓冲区创建多文件 zip 存档吗?