控制堆栈探测。
/Gs[size]
堆栈探测是编译器插入到每个函数调用中的代码序列。 堆栈探测启动时,它在内存中良性延伸存储函数的局部变量所需的空间量。
如果函数的局部变量需要的堆栈空间多于 size 字节,则启动它的堆栈探测。 默认情况下,当函数需要的堆栈空间多于一页时,编译器将生成启动堆栈探测的代码。 这等效于 x86 的 /Gs4096、x64 和 ARM 平台的编译器选项。 此值使应用程序和 Windows 内存管理器可以动态增加运行时提交给程序堆栈的内存量。
![]() |
---|
/Gs4096 的默认值使 Windows 应用程序的程序堆栈可以在运行时适当增长。 我们建议,除非有确切的理由,否则请不要更改默认值。 |
某些程序(如虚拟设备驱动程序)并不需要这种默认堆栈增长机制。 在这些情况下,不需要堆栈探测,通过将 size 设置为大于任何函数(将需要局部变量存储)的值,可阻止编译器生成堆栈探测。 /Gs 和 size 之间不允许有空格。
/Gs0 为需要局部变量存储的每个函数调用激活堆栈探测。 这可对性能产生负面影响。
可以通过使用 check_stack 打开或关闭堆栈探测。 /Gs 和 check_stack 杂注对标准 C 库例程没有影响;它们只影响你编译的函数。
在 Visual Studio 开发环境中设置此编译器选项
-
打开项目的“属性页”对话框。 有关详细信息,请参见如何:打开项目属性页。
-
选择 C/C++ 文件夹。
-
选择“命令行”属性页。
-
在“附加选项”框中键入编译器选项。
以编程方式设置此编译器选项
https://msdn.microsoft.com/zh-cn/library/9598wk25.aspx