【すたっくおーばーふろー】
スタックオーバーフロー とは?
最終更新:
💡 呼び出しの積み重ねが、上限を超える
関数呼び出しの記録などに使うスタック領域を使い果たした状態です。終了しない再帰だけでなく、正常に終わる処理でも呼び出しが深すぎると起きます。エラーの名前や動作は言語・実行環境によって異なります。
📌 このページのポイント
コールスタックって何?
関数を呼び出したとき、呼び出し元へ戻るための情報などを積む領域だよ。呼び出し先が終わると、その情報を使って元の処理へ戻る。実行環境によって保存する内容は違うけれど、呼び出しを重ねすぎると、使える容量の上限に達してしまうんだ。
再帰が無限に続くと起きるの?
パソコン全体のメモリがなくなったの?
必ずしもそうではないよ。スタックに使える容量は、パソコンのメモリ全体とは別に制限されることがある。JavaではStackOverflowError、JavaScriptではMaximum call stack size exceededなどが出る。上限やエラー時の動作は、言語・実行環境によって違うんだ。
どうやって原因を調べる?
直すには上限を増やせばよい?
まとめ:ざっくりこれだけ覚えればOK!
「スタックオーバーフロー」って出てきたら「関数呼び出しなどの積み重ねで、スタックの容量を使い果たす状態」と思えばだいたいOK!
📖 おまけ:英語の意味
「Stack Overflow」 = スタックの溢れ
💬 stackは積み重ね、overflowは溢れること。プログラムの呼び出し情報などを置く領域の上限を超える、という意味で使われるよ。