ICDロゴ

スタック・オーバーフロー (stack overflow)

最終更新日: 2007/05/10

 用意されているサイズ以上のスタック領域を使用してしまい、スタックが不足する状態。プログラムのバグや設計ミス(スタック使用量の見積もりミス)などに起因する。

 プログラムのバグでスタックにデータをプッシュし続けたり、サブルーチン呼び出しが何度も繰り返され、止まらなくなったりした場合には、スタックがオーバーフローする。例えばスタック領域として8Kbytesしか確保されていないのに、10Kbytesのデータをスタックに積み込もうとしたり、あるサブルーチンの中からさらに自分自身を呼び出し続けたりすると、スタックが不足する。この状態をスタック・オーバーフローという。

 スタック・オーバーフロー時の挙動はシステムによりさまざまである。スタック領域の隣(一般的にはスタックの下位アドレス領域)にあるデータ領域が破壊され、システムが暴走したり、異常停止したりする。組み込みシステムなどではメモリ容量に制約があり、スタック領域外にはメモリが存在せず、書き込みできずに異常終了したりする。UNIXやWindowsなどの一般的なOSでは、スタック・オーバーフローが起こると自動的にスタック領域が伸張され、より多くのスタックが利用できるようになる。ただしその場合でも拡大可能な最大サイズが決められているのが普通であり、その限界を超えてさらにスタックを使用することはできない。

Copyright (C) 2000-2007 Digital Advantage Corp.

アイティメディアの提供サービス

キャリアアップ