

スタックは大きいメモリアドレスから小さいメモリアドレスに向かって積み上がっていくと思いますが、もしあふれた場合はスタックの向こう側のメモリ、つまりスタックより大きいメモリが書き換えられますか？それともスタックが伸びる方向、つまりスタックの上限より小さいアドレスが書き換えられますか？


CC BY-SA 4.0
2020-05-17T22:10:22.713
66731
2020-05-17T23:19:32.810
39983
question
メモリ管理 スタック
スタックオーバーフロー について


> 小さいメモリアドレスに向かって積み上がっていく

とも限りません。
[スタックが低いアドレスに向かって積まれない場合はありますか？](https://ja.stackoverflow.com/questions/61298/)

> スタックの上限より小さいアドレスが書き換えられますか？

まあ普通はそうですね。今どきの CPU/OS
であればメモリ保護機構なるものがついているので、スタック領域外は書き換えそのものができない（＝どこも壊さない・壊せない）こともあります。

16bit CPU でスタックが `0x2000` 番地から小さいアドレスへ進む場合を仮定して、

  * スタック末尾（＝最小アドレス）が `0x1000` 番地であったなら、スタックオーバーフローすると `0x0FFE` 番地あたりを壊すわけです（＝小さいアドレスを壊す）
  * スタック末尾が `0x0000` であったなら `0xFFFE` 番地あたりを壊す（＝大きいアドレスを壊す）わけです

まあどっちもありですよね。だから具体的処理系を想定しないとなんでもありになっちゃいます。


CC BY-SA 4.0
2020-05-17T23:01:45.927
66733
2020-05-17T23:19:32.810
2020-05-17T23:19:32.810
8589
8589
66731
answer