C++ 有关堆栈大小的警告消息

C++ 有关堆栈大小的警告消息,c++,visual-studio-2010,visual-c++,stack,C++,Visual Studio 2010,Visual C++,Stack,我使用visualstudio2010并激活代码分析。在我的代码中,有一行在函数中分配一些内存: TCHAR someString[40000]; 代码分析抛出一条警告消息: 警告C6262:函数使用堆栈的“40000”字节:超过/分析:堆栈大小“16384”。考虑将一些数据移动到堆 我不知道我是否应该认真对待这个警告。如果我在堆栈上分配一些内存>16384,我是否必须面对一些真正的问题?或者,这只是一条提醒我必须注意堆栈大小的一般警告消息?据我所知,默认堆栈大小为1MB(如果使用Visua

我使用
visualstudio2010
并激活
代码分析。在我的代码中,有一行在函数中分配一些内存:

TCHAR someString[40000]; 
代码分析抛出一条警告消息:

警告C6262:函数使用堆栈的“40000”字节:超过/分析:堆栈大小“16384”。考虑将一些数据移动到堆


我不知道我是否应该认真对待这个警告。如果我在堆栈上分配一些内存>16384,我是否必须面对一些真正的问题?或者,这只是一条提醒我必须注意堆栈大小的一般警告消息?据我所知,默认堆栈大小为1MB(如果使用Visual Studio)。

无可否认,该消息可能会令人困惑,因为VS(项目属性)确实报告默认值为1M。但是,如果您查看的文本,您会注意到代码分析的限制实际上是16k。按照该链接底部的步骤更正警告。

我发现必须认真对待此类警告。 我有一份声明

错误地在一个大函数的深处留下。函数总是在进入函数后立即崩溃,即使本地分支中的声明很遥远,而且我使用调试器从未到达那里。
在MS Visual Studio中很难找到它,即使代码分析给了我一个警告。

我对此没有任何问题。如果此函数不使用递归,并且是唯一一个分配大量堆栈内存的函数,则应该可以。不过,您可能需要考虑将其移动到堆中,以防万一。@MichaelXanadu:在MSDN页面上对此有很好的解释:。在这个页面上,建议在这种情况下使用原始堆内存或更好的STL容器作为std::string std::vector。因此堆栈大小实际上是1MB,并且每次堆栈大小超过定义的阈值(例如16K)时都会抛出警告消息对出于代码分析的目的,除非对其进行更改,否则堆栈大小为16k。您可以在执行分析时覆盖该限制。@rrirower:不完全可以。代码分析不考虑栈是16K,它只是认为它可疑时,一个单一的函数使用超过16K的堆栈。那完全不同。OTOH我真的希望警告能为我列出堆栈上最大的变量:/
{ // some local branch deep inside a function 
char T[2000000];  
  ...
}