在GCC中,我可以有选择地为特定功能设置优化标志,所以:
void func() {}
产生
func():
push rbp
mov rbp, rsp
nop
pop rbp
ret
而且:
__attribute__((optimize("-fomit-frame-pointer")))
void func() {}
产生
func():
nop
ret
我如何在视觉工作室中做同样的事情?
答案 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检查了这一点)