web-dev-qa-db-ja.com

C#のスタック容量

C#のスタック容量を教えてください。

30,000個のアイテムの配列を使用して、3Dメッシュの閉じたオブジェクトを形成しようとしています。

49
George ARKIN

.NETアプリケーションのデフォルトのスタックサイズは1 MB(デフォルトは32ビットASP.NETアプリの場合256 KB、64ビットASP.NETアプリの場合512 KB)ですが、変更できます。アプリケーションの場合、実行可能ファイルのPEヘッダーを変更することにより、デフォルトサイズを変更できます。作成するスレッドの場合、スタックサイズを取得するコンストラクタオーバーロードを使用できます。

しかし、Anton Tyjhyyが答えで指摘しているように、配列は参照型であり、ヒープに配置されます(配列がたまたま値型を保持している場合でも)。

71
Brian Rasmussen

配列はヒープ上に存在しますが、スタックサイズはあなたの場合には関係ありません。

53
Anton Tykhyy

スタックサイズは構成可能であり、 いくつかの異なる方法で設定できます

29
Dave Webb

スタックを使用して配列を格納するには、ポインターとstackallocで安全でないコードを使用して、スタックに必要なメモリ空間を割り当てる必要があります。

5
Jan Prokes

現在の.NETアセンブリの値を確認する場合は、Visual Studioコマンドプロンプトに付属するILDASMコマンドを使用して確認できます。ツールを開始したら、アセンブリを開き、_View -> Headers_メニューに移動します。新しく開いたHeadersウィンドウのPE Optional Header (32 bit)セクションまでスクロールします。次の2つのフィールドが表示されます。

  1. スタックリザーブのサイズ-これは一目瞭然です。これは、プログラム/アプリケーションで作成されるスレッドに割り当てられるデフォルトのスタックメモリサイズです。
  2. スタックコミットのサイズ-コミットされたスタックスペースは ---(here からのHans Passantの引用)

上記のスペースはオペレーティングシステムのページングファイルに予約されているため、必要に応じてスタックを常に交換できます。

enter image description here

5
RBT