スタックオーバーフローの恐怖

次のプログラム例は、Linuxでは何の問題もなく動きますが、Windowsではクラッシュします。Windows2000上のBorland C++ 5.51およびCygwin GCC 3.2で確かめました。

/*
* trouble.c : stack overflow on Windows
* (C) 2004 ISHIKAWA Naota <naota@neo-zion.sakura.ne.jp>
* This is freesoftware under BSD lisence.
*/
#include <stdio.h>

int main()
{
double trouble[1024*1024];
printf("Hello, world.¥n");
return 0;
}

auto変数がスタックを消費しすぎるからです。Windowsでは、不幸なことに、メモリーがあるだけスタックを使えるのではなく、EXEファイルを作 る時にスタック領域の大きさが決定されてしまうからです。根本的な解決方法は、リンカーのオプションでスタック領域を増やすことです。しかし、次のよう に、大きな変数領域を静的に確保するという逃げ道があります。

  static double trouble[1024*1024];

(C) 2004 石川直太 無保証
C/C++ tips に[戻る]
Tips に[戻る]
石川直太のホームページに[戻る]