1

GCC を使用 (windows 32、C のみ、デフォルトのビルド オプション)。

ローカル スタックの最大サイズは?

例えば:

void myfunc (void)
{
char is_this_too_big_for_a_local_var[64*1024*1024];

somefunc(is_this_too_big_for_a_local_var);
}

おそらくコーディングの初期の頃のトラウマ的な経験から、私は最大で 16k 以上のローカル ストレージを使用しようとしたことはありません..

とにかく、本当に大きな変数をローカルに配置しても問題ありませんか? それとも数Kが上限ですか?

4

1 に答える 1

2

システムに大きなスタックがある場合でも、それを使用する習慣を身につけるべきではありません。大きなスタック フレームを持つコードは、マルチスレッド プログラムで使用したいと思うとすぐに問題になります。これは、各スレッドのスタックが可能な限り最大のスタック使用量に対応するのに十分な大きさである必要があり、スレッドを作成するコードが使用したいpthread_attr_setstacksize(または同等) 各スレッドで必要以上の仮想アドレス空間とコミット料金を消費しないようにします。

編集:メインスレッドのスタックに必要なスペースを確保するための「移植可能な」(POSIXシステムへの)方法のアイデアを次に示します。

  1. argvmain の先頭で、新しく割り当てられたメモリにコピーします。
  2. 次に、目的のスタック サイズで新しいスレッドを作成し、そのスレッドに のコピーを渡しますargv。目的のサイズが利用できない場合、これは失敗し、エラーが報告されます。
  3. 新しいスレッドで、mainnew を使用して再度呼び出しますargvが、手順 1/2 を繰り返さないようにグローバル フラグを設定します。
  4. pthread_exit最初の「メインスレッド」から、新しいスレッドを「メインスレッド」として扱います。
于 2011-09-29T03:46:04.090 に答える