2017-06-22 87 views
1

在GCC我可以选择性地设置为特定的功能优化标志,所以此:选择性省略帧指针在MSVC

void func() {} 

生成:

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

这:

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

生成:

func(): 
     nop 
     ret 

我怎样才能在视觉工作室做同样的事情?

回答

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()将省略帧指针进行编译。

注意:正如我所看到的,您必须构建优化的构建以使此选项有效。所以,无论是提供一些优化标志编译器(如“/噩”),或包括“G”到编译:#pragma optimize("gy", ...)

(我与Visual Studio 2015年选中此)