コンパイラの違いによるGCの挙動

やねうらおさんとこのC#スレの話題。
ループ内で100MB単位のメモリを確保しまくるコードがGCを呼び出すかどうかで、cscコンパイルしたモジュールだとSystem.OutOfMemoryException 例外を投げて終わるとありました。それはそれでアリだと思うのですが、興味本位でmcs(MonoのC#コンパイラ)でコンパイルしたモジュールで実験してみたところ、何故か例外が発生しませんでした。ランタイムエンジンの実装の違いで動作が違うのなら話は分かるのですが、10行程度の単純なコードでこんな違いがあると思ってなかったので、ちょっと驚きました。では、mcsでコンパイルしたモジュールの方が正しいかというと、それも疑わしいです。mcsの方はパフォーマンスが非常に悪く、ループ毎にGC.Collectしまくっているのでは?と疑いたくなるほどです。ildasmで逆アセンブルしたり、Anakrinoで逆コンパイルしてみても、GC呼び出しなんか埋め込まれている様子はありません。ひょっとしてアセンブリ生成時にGC.Collectを神経質に呼び出させるようなオプション指定でも出来るのでしょうか?(^^;
(追記)解決。3/25日参照。


生成されるコードの違いといえば、catch {...}のように、全ての例外をキャッチするコードを書くとcscとmcsはObjectで受けますが、cscc(DotGNU)はExceptionとなります。C#ですとExceptionから派生した例外以外はthrow出来ないので、どっちでも構わないのですが、MSの実装がObjectなので、Objectが正しいのかしら・・・