C#のスタック容量を教えてください。
30,000個のアイテムの配列を使用して、3Dメッシュの閉じたオブジェクトを形成しようとしています。
.NETアプリケーションのデフォルトのスタックサイズは1 MB(デフォルトは32ビットASP.NETアプリの場合256 KB、64ビットASP.NETアプリの場合512 KB)ですが、変更できます。アプリケーションの場合、実行可能ファイルのPEヘッダーを変更することにより、デフォルトサイズを変更できます。作成するスレッドの場合、スタックサイズを取得するコンストラクタオーバーロードを使用できます。
しかし、Anton Tyjhyyが答えで指摘しているように、配列は参照型であり、ヒープに配置されます(配列がたまたま値型を保持している場合でも)。
配列はヒープ上に存在しますが、スタックサイズはあなたの場合には関係ありません。
スタックサイズは構成可能であり、 いくつかの異なる方法で設定できます 。
スタックを使用して配列を格納するには、ポインターとstackallocで安全でないコードを使用して、スタックに必要なメモリ空間を割り当てる必要があります。
現在の.NETアセンブリの値を確認する場合は、Visual Studioコマンドプロンプトに付属するILDASM
コマンドを使用して確認できます。ツールを開始したら、アセンブリを開き、_View -> Headers
_メニューに移動します。新しく開いたHeaders
ウィンドウのPE Optional Header (32 bit)
セクションまでスクロールします。次の2つのフィールドが表示されます。
上記のスペースはオペレーティングシステムのページングファイルに予約されているため、必要に応じてスタックを常に交換できます。