「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>仮想メモリ管理]] * 目次 [#d312e77a] #contents *概要 [#yb9ceb34] -スタック・オーバーフローはなぜ起きるのか?~ と言えば、OSが確保したスレッドのスタックが、~ 再帰呼出し等によって、領域超過を起こすため。 -スレッドのスタックには、 --各関数のスタック・フレームが ---引数、戻り値、ローカル変数 ---戻り先の呼出し元へのポインタ --各関数の呼出し履歴分 >積まれることになる。 *詳細 [#eacb9c3e] **基礎 [#rdffbdda] 基本的に1スレッド1MBのメモリ(アドレス空間)を消費する。 スレッドのスタックのメモリ予約・確保については、 -OSがスレッド作成時にスタックを予約する(基本1MB)。 -OSが関数呼び出しの際にスタックを積む(コミット)。 という動作になる。ユーザによる制御は不要。 スタックの最上位のページは既にコミットされており、~ スタックに最上位まで積まれ二重にコミットしようとした~ 場合にスタックオーバーフローという例外が発生する。 スタックの成長はメモリの成長とは(アドレス空間から)逆方向になる。 -メモリの成長 : 0 ---> 4GB(16TB) の方向 -スタックの成長 : 4GB(16TB)---> 0 の方向 ※ 関数の呼び出し規則によって積まれ方の詳細は若干は違う。 **スタック・サイズの変更 [#r85913bc] -/STACKのリンカ・オプションで予約サイズなどを変更可能。 -EDITBINツールを使用して変更可能 --C#(WPF)アプリのスタックサイズの変更方法 - Qiita~ https://qiita.com/hiroed1218/items/d2caf33378961b02ec9e --Stack sizes in IIS – affects ASP.NET – ASP.NET Debugging~ https://blogs.msdn.microsoft.com/tom/2008/03/31/stack-sizes-in-iis-affects-asp-net/ **IISのスタック [#x0341f29] サイズが小さいらしい。 **IIS上でのスタック・サイズ [#x0341f29] IIS上ではスタック・サイズが小さいらしい。 -Issue #341 · OpenTouryoProject/OpenTouryo~ Change the implementation of recursion to loop for suppress stack overflow in BaseDam.~ https://github.com/OpenTouryoProject/OpenTouryo/issues/341 ---- Tags: [[:Windows]], [[:メモリ管理]], [[:障害対応]], [[:性能]], [[:デバッグ]]