-4

ランタイムやOSの制限がないことを前提としています。仮想アドレス空間より大きいオブジェクトを割り当てることはできますか?

4

1 に答える 1

10

私はこの奇妙な言葉の質問から本当の質問を見つけようとしています。これらの質問はどうですか?

十分な仮想メモリスペースが利用可能であると仮定して、.NETのオブジェクトのサイズに理論上の制限はありますか?

はい。ランタイムは、オペレーティングシステムに関係なく、2GBを超える単一の管理対象オブジェクトを許可しません。

Windowsでは、仮想メモリ空​​間よりも大きいメモリブロックを割り当てることは合法ですか?

はい。人々はこの事実にしばしば驚かされますが、仮想メモリは理由から仮想メモリと呼ばれることを忘れないでください。それは本当の記憶ではありません。実メモリはディスクスペースです。

メモリはRAMではありません-それはディスクスペースの上にある高速で便利なキャッシュです。そして、メモリは仮想メモリではありません。仮想メモリは、メモリを参照するための便利な方法です。私の意見では、メモリはディスク上のスワップファイルのページとして最もよく視覚化されます。

32ビットWindowsで40億バイトのブロックを割り当てたい場合は、問題ありません。オペレーティングシステムは、ディスク上に40億バイトを予約します。次に、それを仮想アドレス空間にマップする方法を決定できます。すべてが適合するわけではないため、マッピングとマッピング解除を自分で管理する必要があります。レイモンドはここでそうする方法を説明します:

http://blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx

C#から簡単に大きなメモリブロックを操作できるライブラリはありませんが、まだ使用できるライブラリがない場合は、作成するのは特に難しくありません。率直に言って、私は自分でマッピングを行うのではなく、メモリマップファイル(C#から実行できます)を使用する傾向があります。

于 2013-02-28T00:18:29.263 に答える