在MSVC中选择性地省略帧指针

时间:2017-06-22 09:50:09

标签: 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

我如何在视觉工作室中做同样的事情?

1 个答案:

答案 0 :(得分:2)

编译器的命令行参数/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:#pragma optimize("gy", ...)

(我已经使用Visual Studio 2015检查了这一点)