/Gs(控制堆栈检查调用)

控制堆栈探测的阈值。

语法

]$

自变量

size
(可选)在启动堆栈探测之前局部变量可以占用的字节数。 /Gssize 之间不允许有空格。

注解

堆栈探测是编译器插入到每个函数调用开头的代码序列。 堆栈探测启动时,它在内存中良性延伸存储函数的局部变量所需的空间量。 该探测会导致操作系统在运行函数的其余部分之前在附加堆栈内存中透明分页。

默认情况下,当函数需要的堆栈空间多于一页时,编译器将生成启动堆栈探测的代码。 该默认值等效于 x86 的、x64 的、ARM 的和 ARM64 平台的 /Gs4096 编译器选项。 此值使应用程序和 Windows 内存管理器可以动态增加运行时提交给程序堆栈的内存量。

注意

/Gs4096 的默认值使 Windows 应用程序的程序堆栈可以在运行时适当增长。 我们建议,除非有确切的理由,否则请不要更改默认值。

某些程序(如虚拟设备驱动程序)并不需要这种默认堆栈增长机制。 在这些情况下,不需要堆栈探测,通过将 size 设置为大于任何函数(将需要局部变量存储)的值,可阻止编译器生成堆栈探测。

/Gs0 为需要局部变量存储的每个函数调用激活堆栈探测。 该值可对性能产生负面影响。

对于 x64 目标,如果在没有 size 参数的情况下指定 /Gs 选项,则它与 /Gs0 相同。 如果 size 参数的范围为 1 到 9,则编译器会发出警告 D9014,并且效果与指定 /Gs0 相同。

对于 x86、ARM 和 ARM64 目标,在没有 size 参数的情况下,/Gs 选项与 /Gs4096 相同。 如果 size 参数的范围为 1 到 9,则编译器会发出警告 D9014,并且效果与指定 /Gs4096 相同。

对于所有目标,介于 10 和 2147483647 的 size 参数将阈值设置为指定值。 size 为 2147483648 或更大会导致错误 C1049。

可以通过使用 check_stack 指令打开或关闭堆栈探测。 /Gscheck_stack pragma 对标准 C 库例程没有影响;它们只影响你编译的函数。

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“命令行”属性页

  3. 在“其他选项”中输入 /Gs 编译器选项和可选大小。 选择“确定”或“应用”以保存更改。

以编程方式设置此编译器选项

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法