C6262

警告的C6262:函数使用 <constant> 字节堆栈:超过/analyze: stacksize<constant 2>。 请考虑将某些数据移到堆中

此警告意味着超出了该堆栈使用率预设阈值(constant 2)在函数中检测到。 此警告的默认堆栈帧范围是用户模式的16 KB,核心架构的1 KB。 堆栈均匀的在用户模式是有限和未能提交堆栈原因页溢出异常。 核心架构具有12 KB堆栈大小限制,不能递增;因此,内核模式代码应积极限制堆栈使用。

若要更正此警告后的问题,您可以将一些数据移至堆或移动到其他动态内存。 在用户模式下,一种堆栈帧可能不是问题和此警告可能是为了,但一种堆栈帧增加堆栈溢出的风险。 (用堆栈帧可能发生,如果函数大量使用堆栈或递归。)总的堆栈大小以用户模式只能增加,如果堆栈溢出实际上出现,但是,到系统限制。 可以使用 /analyze 命令行选项更改 <constant 2>的值,但是,增加它引入了风险错误不会报告。

为内核模式代码(例如,按驱动程序 <constant 2> 的项。值设置为1 KB。 正确编写的驱动程序应具有非常处理此值的少量功能,并且,更改限制可以向下适用。 用于用户模式代码可以减少堆栈大小的相同的泛型方法可适应核心架构代码。

示例

下面的代码生成此警告,因为 char buffer 分配16,382个字节,因此,局部整数变量 i 分配4个字节,将超过16 KB默认堆栈大小限制。

#include <windows.h>
#define MAX_SIZE 16382

void f( )
{
  int i;
  char buffer[MAX_SIZE];
  
  i = 0;
  buffer[0]='\0';

  // code...
}

下面的代码通过将一些数据移至堆来更正此警告。

#include <stdlib.h>   
#include <malloc.h>
#define MAX_SIZE 16382
void f( )
{
  int i;
  char *buffer;

  i = 0;
  buffer = (char *) malloc( MAX_SIZE );
  if (buffer != NULL) 
  {
    buffer[0] = '\0';
    // code...
    free(buffer);
  }
}

通过调整堆栈大小来更正此警告

  1. 在菜单栏上,依次选择 项目属性

    将显示**“属性页”**对话框。

  2. 外接 *** 配置属性 ***

  3. 外接 *** C/C++ ***

  4. 选择 *** 命令行 *** 属性。

  5. *** 附加选项 ***,添加 /analyze:stacksize16388

请参见

任务

如何:使用本机运行时检查

参考

/STACK(堆栈分配)

_resetstkoflw