2017-06-22 45 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年選中此)