3

アプリケーションのメモリ制限に関して少し混乱しています。私が見る限り、x64 を対象とする ac# アプリケーションを作成すると、私のプログラムは 8TB の仮想アドレス空間 = HD 上のスペースにアクセスできますか?

OS >= Windows 7 Professional は 192GB の RAM をサポートします。では、192 ギガのシステムを使用していた場合 (残念ながらそうではありません)、8.1 TB を超えるデータをメモリにロードできます (他のプロセスが実行されていないと仮定した場合)。

仮想メモリは、使用可能な RAM を使い果たした場合にのみ使用されますか? 仮想メモリとRAMの使用に関連するパフォーマンスへの影響があると思いますか?

これらがばかげた質問のように見える場合はお詫びしますが、メモリ管理に関しては、私はどちらかというとグリーンです。

4

2 に答える 2

1

あなたの質問は実際にはいくつかの関連する質問であり、それぞれを個別に取り上げます。

OS> = Windows 7 Professionalは、192ギガのRAMをサポートします。それで、私が192gigシステムを持っていた場合(残念ながら私は持っていません)、8.1TBをわずかに超えるデータをメモリにロードできますか(他のプロセスが実行されていないと仮定して)?

いいえ、それでも8TBになります。これは、RAM内であろうと他の場所であろうと、アドレス可能なスペースの最大量です。

ただし、OSが使用されているスペースを追跡する必要があるため、Windows自体をいくらかアンロードしたとしても、8TBを使用することはできません。合計すると、おそらく約7TBに達する可能性があります。

仮想メモリは、使用可能なRAMが不足した場合にのみ使用されますか?

いいえ、仮想メモリをオンにしている場合、RAM全体が通常HDDにプリロードされます(数秒かかるか、数秒かかります)。これにより、OSは、データを永続化することなく、必要に応じてスペースを空けるために何かをアンロードできます。OSは徹底的に追跡しているので、これが当てはまるかどうかがわかります。

仮想メモリとRAMの使用に関連するパフォーマンスへの影響があると思いますか?

コンテキストによって異なります。ハードドライブでのすべてのシークには計算上の永遠が必要ですが、それでもほんの一瞬です。プロセスがスラッシングして仮想メモリに繰り返しアクセスしていないと仮定すると、ハイパフォーマンスコンピューティング以外でパフォーマンスが大幅に低下することに気付くことはありません。

これらがばかげた質問に見える場合はお詫びしますが、メモリ管理に関しては、かなり環境に配慮しています。

あなたの主な問題は、現実と一致しない記憶がどのように機能するかについていくつかの先入観を持っていることです。本当に興味がある場合は、最新のシステムでメモリがどのように使用されているかを調べる必要があります。

たとえば、ほとんどの人は、ポインタが基本的な構造であるため、ポインタがメモリ内の場所を指していると概念化しています。これは完全に真実ではありません。実際、ポインタには、システムのアドレス可能なスペース内の場所にデコードできる情報が含まれていますが、これは常にRAMにあるとは限りません。このデコードプロセスでは、興味深いトリックがかなり多く使用されていますが、この質問の範囲を超えています。

于 2012-11-13T16:54:45.583 に答える
0

通常は、 をターゲットとするアプリケーションを作成する必要がありますAny CPU。次に、.NET ローダーは、実行中のプラットフォームに応じて、アプリケーションを実行するランタイム環境のバージョンと、コンパイルするネイティブ コードの種類を決定します。アプリケーション用に作成されたプロセスにロードされるカスタム ネイティブ コンポーネントを使用している場合を除き、プラットフォームを指定する必要はありません。次に、このプロセスはいくつかの仮想アドレス空間に関連付けられます-それが物理メモリにどのようにマップされるかは、OSによって管理されます...

于 2012-11-13T16:41:07.747 に答える