|
スタックオーバーフロー (stack overflow) は、プログラム中での関数呼び出しが多すぎる時に発生する、バッファオーバーフローの一種である。 == 概要 == オペレーティングシステムや実行オプションによるが、コールスタックに格納できる情報量には上限がある。コールスタックに蓄積するデータ量が多すぎるとスタックは「オーバーフロー」し、プログラム側で対策をとっていなければ通常はクラッシュしてしまう。ただし、スタックオーバーフローの原因となりうるコーディング技法は比較的限定されており、市販ソフトウェアでこれが発生した場合はそのソフトハウスの開発能力が極めて低い事を自白するようなものである。 スタックオーバーフローの一番の原因は再帰による無限ループである。ただし、末尾最適化を実装した言語では末尾再帰をループへ展開することができ、末尾再帰ではスタックオーバーフローは起こらない。末尾再帰はループ処理に最適化されるので、再帰することそれ自体でスタックを消費することが無いからである。 次によくある原因としては、スタック上に巨大な配列を確保しようとすることである。コールスタックに格納できる情報量には上限があるため、巨大な局所変数はコールスタックに格納するのではなくヒープ領域などを明示的に利用すべきである。 さらに他の原因として、関数呼び出しの階層数が深すぎる場合などがある。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「スタックオーバーフロー」の詳細全文を読む スポンサード リンク
|