2009-07-09 4 views
0

私はこのことが一度私に起こったのを見たと確信しています。 8 GBのRAMを搭載した64ビットOSでは、配列がcaになると例外が発生します。 2 GB。例外名とは何ですか?[.net] 64ビットOS上で1つのオブジェクトが2 GBを超えると.NETで例外がスローされますか?

私のプログラムは悪いと言わないでください。私はそれをしてはならないからです。私を信じて、それは必要でした。

編集:プログラムは64ビットプロセスとして実行されていました。

答えて

0

あなたはそれについての議論のためのthis pageSystem.OutOfMemoryException

ルックを取得する必要があります。 (Googleのキャッシュ結果のため申し訳ありませんが、dotnet247.comサイトはこの回答の時点でダウンしていると思われる)

2

OutOfMemoryExceptionおそらく?あなたのマシンが8GBのメモリを持っているからといって、アプリケーションがすべてのメモリにアクセスできるわけではありません。

投稿したこと以外何も知らずに、アプリケーションが32ビットプロセスで動作していると仮定します(64ビットプロセッサ上であっても)2GB仮想アドレスに制限されていますその32ビットプロセスのスペース。これはすべて当然の推測であり、あなたがOutOfMemoryExceptionを見ることができる多くの理由があり、それ以上の詳細がなければ理由を言うことは不可能です。

+0

なぜOutOfMemoryExceptionはmentalisのプロキシプロジェクトにリンクされていますか?そこにOOM例外が記述されていますか? –

+0

私の間違い!それは私が別の答えのためにコピーしたリンクでした - それをキャッチするためにありがとう。 –

3

次は、8GBのRAMを搭載した私のWindows Server 2008 64ビット上でOutOfMemoryExceptionスロー:

var a = new int[int.MaxValue]; 
3

私は(最大4GBの物理メモリを搭載したVista Ultimateの64ビット版)をチェック、コード:(2147483648が署名したint型に収まらないので)

byte[] x = new byte[2147483648]; 

は、OverflowExceptionがスローを

byte[] x = new byte[2147483647]; 

はOutOfMemoryExceptionが

byte[] x = new byte[2147483591]; 

が正常に私のマシン上で動作する最大サイズである配列を割り当てスローします。

この投稿によるhttp://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx人為的に管理対象オブジェクトのサイズを2GBに制限することが設計上の選択でした。

P/Invokeを使用してアンマネージメモリを割り当て、必要であれば安全でないコードとポインタでアクセスすることができます。

関連する問題