|
■No85052 (はな さん) に返信 > スタックの深さが300程度でスタックオーバーフローするのが腑に落ちないでいたのです。
300で落ちるのが妥当なのかは、具体的なコードを見ていないので判断できませんが、 たとえば極端な例として、下記のようなコンソールアプリを用意してみたところ、 60 回までは耐えられますが、61 回目で StackOverflowException を吐きました。
public struct ST0 { public ST1 a, b, c, d; } public struct ST1 { public ST2 a, b, c, d; } public struct ST2 { public ST3 a, b, c, d; } public struct ST3 { public ST4 a, b, c, d; } public struct ST4 { public decimal a, b, c, d; }
class Program { static void Main() { Loop(300, default(ST0)); } static void Loop(int i, ST0 z) { if (i > 0) Loop(i - 1, z); } }
なお、コンパイル後に editbin /STACK:4000000 "C:\…\ConsoleApplication1.exe" とすれば、244 回までは耐えられるようになりますし、 /STACK:8000000 にすれば、488 回まで耐えられました。
|