2013-03-11 5 views
9

タイトルには次のように書かれています。スタックのサイズに関する一般的な「経験則」はありますか?私は、OS、アーキテクチャ、キャッシュのサイズ、使用可能なRAMの量などによってサイズが異なると推測しています。特定のプログラムのスタックメモリの大きさはどれくらいですか?それを設定できるコンパイラフラグはありますか?

しかし、一般的なことは何でも言えることはありますか。どのくらいのスタックを見つけて、このプログラムを使用することができますか?ボーナス問題としては、スタックのサイズをユーザーが固定サイズに設定できるように、コンパイラフラグなど(C/C++をここで思っていますが、もっと一般的です)などの方法もあります。

Btw、私は厳密に好奇心から尋ねています、私はスタックのオーバーフローがありません。 :)

+0

与えられたプログラムが使用するスタックの量は、一般に決めることができません(これは[停止問題](http://en.wikipedia.org/wiki/Halting_problem)と同じです)。限られたスタックサイズを明示的に強制する方法を尋ねていますか? –

+0

この質問はあなたに興味があるかもしれませんhttp://stackoverflow.com/questions/156510/increase-stack-size-on-windows-gcc – Ganesh

+0

まず最初に感謝!しかし、なぜこれは決めることができず、停止問題と同等ですか? – Andersnk

答えて

3

はい、スタックサイズを設定できます。通常はリンカーフラグであり、ツールチェーンによって異なります(通常、これはコンパイラの名前で呼ばれます)。

を使用しています。マネージコードでのWindowsでは、スレッドのデフォルトのスタックサイズは、オペレーティングシステムに関係なく、万バイトである

+0

GCC/GNU-ldの '--stack'はWindows固有です。他のターゲットでは使用されません。 –

+0

@R ..:オプションのスペルが違うか( '-stack_size')、オプションがないと思いますか? –

+1

オプションはありません。 Unixシステムでは、最初のスレッドの最大スタックサイズは 'ulimit'コマンド/' setrlimit'関数によって決まりますが、Linuxでは予約/コミットされたスタックサイズは約128kに固定されています。 (132kまたは136kが典型的な合計です)。プログラムがそれを超えてスタックを増やそうとし、メモリが空いていると、 'ulimit' /' setrlimit'で設定した制限まで成長することができますが、 'exec'が取る瞬間に〜128kを超えて予約する方法はありません場所。 –

5

など

(ETC C#、VB、)あなたは別のスタックを持っている新しいスレッドを強制することができますこのCTORとサイズ:

http://msdn.microsoft.com/en-us/library/5cykbwz4.aspx

は、それが管理されているかどうか、Windowsプログラムのデフォルトのスレッドのスタックサイズを変更するには、EDITBINユーティリティを使用することができます0

+1

実際には、(CreateThreadに0を渡すと)デフォルトサイズは、(PEヘッダで指定された)起動スレッドのスタックサイズと同じです。 –

+0

@BenVoigt:私はそれを知らなかったが、それは完璧な意味がある。ありがとう! –

+0

追加情報:ネイティブスレッドを作成するためのAPI(スタックサイズを指定できる)は['CreateThread']です(http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453.aspx ) –

関連する問題