前回は次のコードを実行させると失敗するところで終わりました。というわけで、今回はこの不具合を解決することに全力を注ごうと思います。
ソースコードには間違いはないようです。こんな時は逆アセンブラの登場です。
色々追加されていますが、今回注目すべき点は.maxstackです。
ちょっと前にスタックに積んで計算のモデルを書きましたよね?その時は入れたぶんだけスタックが延びていきましたが、現実には色々な制限が付きます。要するにスタックには最大サイズがあるのです。そして、この値は何も設定しないと「8」になります。
これで問題が解決しました。とりあえずは「.maxstack」の値を「10」にすればいいようです。
これで問題は解決しました。このようにスタックマシンのスタックサイズは実行時に大きな意味を持つようです。
スタック使用数が少ない場合も使うギリギリの値にスタックの使用数を調整した方がパフォーマンスが上がると考えられます。ですので、今までのソースコードにも「.maxstack」を使用してみましょう。
ここまで読んでくれた方の中でILに詳しい方。スタック領域を少々大きく取っても連続の方がパフォーマンスが良かったりしますか?教えて頂けるとありがたいです。