From: "U.Nakamura" Date: 2006-09-14T00:20:05+09:00 Subject: [ruby-dev:29569] decrease "stack level too deep" in Windows こんにちは、なかむら(う)です。 Windowsなプラットフォームで、実際に使えるスタックを十分使わな いうちにstack level too deepになってしまうという問題があった のですが、解決するパッチを作ってみました。 このパッチを適応する前で、 ruby -e "def hoge(n); p n; hoge(n + 1); end; hoge(0)" というワンライナーでは715段目でstack level topp deepだったの ですが、このパッチ適応後で9193段まで行けるようになります。 Windowsにしか影響ないはずなんですが、入れてもいいでしょうか? Index: gc.c =================================================================== RCS file: /home/cvs/ruby/gc.c,v retrieving revision 1.243 diff -u -1 -p -r1.243 gc.c --- gc.c 7 Aug 2006 03:37:46 -0000 1.243 +++ gc.c 13 Sep 2006 15:14:51 -0000 @@ -472,3 +472,3 @@ unsigned int _stacksize = 262144; # undef HAVE_GETRLIMIT -#elif defined(HAVE_GETRLIMIT) +#elif defined(HAVE_GETRLIMIT) || defined(_WIN32) static unsigned int STACK_LEVEL_MAX = 655300; @@ -1540,2 +1540,15 @@ void ruby_init_stack(VALUE *addr } +#elif defined _WIN32 + { + MEMORY_BASIC_INFORMATION mi; + DWORD size; + DWORD space; + + if (VirtualQuery(&mi, &mi, sizeof(mi))) { + size = (char *)mi.BaseAddress - (char *)mi.AllocationBase; + space = size / 5; + if (space > 1024*1024) space = 1024*1024; + STACK_LEVEL_MAX = (size - space) / sizeof(VALUE); + } + } #endif それでは。 -- U.Nakamura