次のプログラム例は、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];