在 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/