C6262
C6262: 関数は、スタック <constant> バイトを使用します: /analyze を超えています:<constant 2>を stacksize。データの一部をヒープに移動することを考慮してください
この警告は、事前定義のしきい値 (constant 2) を超えるスタックの使用は、関数で検出されたことを示します。この警告の既定のスタック フレームのサイズは、ユーザー モードの場合は 16 KB、カーネル モードの場合は 1 KB です。ユーザーでスタック (スタックの原因のページをコミット制限され、エラーは、スタック オーバーフロー例外モードです。カーネル モードに向上させることができない 12 KB のスタックのサイズ制限があり、; したがって、カーネル モードのコードは積極的にスタックの使用を制限する必要があります。
この警告に関する問題を修正するには、ヒープ上または他の動的メモリのデータを実行できます。ユーザー モードでは、1 つ以上のスタック フレームがでない可能性がある問題と、この警告は抑制ある大規模なスタック フレームはスタック オーバーフローの危険性が高くなります。(A の大きい関数がスタック フレームはスタックを頻繁に使用するか、再帰的で発生する可能性があります。)。ユーザー モードの合計スタック サイズは、システム境界までしかスタック オーバーフローが発生すると、実際に増加することができます。<constant 2>の値を変更します /analyze のコマンド ライン オプションを使用できますが、エラーが報告されないことを大きくすると、リスクが発生します。
<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);
}
}
この警告がスタックのサイズを調整して修正するには
メニュー バーで、[プロジェクト]、**[プロパティ]**を選択します。
[プロパティ ページ] ダイアログ ボックスが表示されます。
**[構成プロパティ]**を展開します。
**C/C++**を展開します。
[コマンド ライン] のプロパティを選択します。
[追加オプション]では、/analyze:stacksize16388を追加します。