32ビットマシンでは、各プロセスは4GBの仮想空間を取得します。この場合、断片化によるトラブルに直面する可能性があることを心配することができます。しかし、64ビットマシンの場合、理論上は膨大なアドレス指定可能な仮想メモリがあるため、64ビットマシンでメモリ断片化がまだ問題になっているのはなぜですか?64ビットマシンでメモリの断片化が問題になるのはなぜですか?
答えて
アクセスしようとする各仮想アドレスは、オペレーティングシステムによって物理メモリにマップされます。物理メモリはページ単位で割り当てられます(サイズは4Kなど)。あなたがオフセット1000000 * nで1バイトを割り当てて1から1000000の間でそれを行うならば(はがmmapでそれを行うことができると思います)、OSは物理的に百万ののページを戻さなければなりません。メモリ、これは4Gのようなものです。その物理メモリは他には利用できません。バイトを連続して割り当てた場合は、100万バイトの物理メモリ(256ページ)が必要になります。
正当な理由で4Gを割り当てた後、その一部を割り当て解除して、すべてのページを少しずつ割り当てておくと、同様の悪い状況に陥る可能性があります。完全に空いている物理ページがないため、解放されたメモリを実際に再利用することはできません。それは断片化問題です。
理論上、仮想アドレス1000000と2000000は、物理メモリの同じページにマップされ、断片化を避けることができます。しかし実際には、そして理由があるため、仮想メモリマッピングはページ単位で行われます。あなたはそれについてもっと読むことができます:http://en.wikipedia.org/wiki/Page_table。
メモリがすべて「無駄」なのは、内部の断片化が多いアプリケーションを考えているからです。このプロセスでは、ワーキングセットがメモリに分散され、そのメモリフットプリントがはるかに高いため、メモリ内のページが増えます。このアプリケーションがRAM内の物理スロットに対して競合している場合(典型的なホーム設定ではマシンはまだ実際には約4〜8GBのRAMしか持たない)、ページのスワップが多くなります。一般的に、メモリの使用量や他のアプリケーションとの競合を避けるために、アプリケーションのメモリ使用量を削減する必要があります。
実際に問題ではない場合もありますが、余分なメガバイトを使用することはできませんが、大きなアプリケーションではすべてが追加されます。状況に応じて、コーディングする内容やプロジェクトの目的に応じてできるだけ断片化を少なくすることが重要かどうかが決まります。
"メモリの断片化"はどうですか?これに対する応答は、malloc、OS、およびハードウェア要因が仮想メモリの割り当てとマッピングにどのように影響するかをカバーするはずです... –
@pst私が理解したところからの質問は、私は間違ってそれを読むことができたが)。 –
- 1. 断片化から断片化までのコミュニケーション - インターフェイスが本当に必要なのはなぜですか?
- 2. Facebookのページはなぜ断片化があるのですか
- 3. インデックスが断片化しているのはなぜですか?
- 4. メモリ断片化プロファイラ
- 5. Flash/ActionScriptメモリの断片化
- 6. 64ビットマシンでSpotFire経由のDB接続に関する問題
- 7. CUDAのメモリ断片化問題を解決することは可能ですか?
- 8. Apolloでgraphqlの断片を使うのに問題がある
- 9. ローダーの断片化 - 断片の漏れはありますか?
- 10. なぜ私の断片は空白ですか?
- 11. 断片化していない断片の中の単純なリスト
- 12. アクシビティーから断片化するには
- 13. なぜ私のrecyclerviewは断片のデータを表示しないのですか?
- 14. メモリの断片化を解決するためのヒープ分割
- 15. 64ビットマシンで長く
- 16. Swiftのメモリ断片化を回避する方法
- 17. 64ビットマシンのstrtok
- 18. 64ビットマシンでJVM 32ビットがクラッシュする
- 19. 断続的な問題 - 「閉鎖」のシリアル化がDebugKitで
- 20. デルファイアプリケーションのメモリ断片化を監視または視覚化する方法
- 21. 断片のisVisible()真実ではない
- 22. は、各断片に断片
- 23. 断片化されたメモリはどのように見えますか?
- 24. なぜasp.netでtextmode = passwordが問題になるのですか?
- 25. なぜtablayoutとアクションバーは、アンドロイドで断片化したスペースを入れるのですか?
- 26. MALLOC_MMAP_THRESHOLD_とMALLOC_MMAP_MAX_を使ってメモリの断片化を減らす
- 27. ロード中に断片化が非常に遅くなる
- 28. メモリの断片化を心配せずにファイルを送信する方法は?
- 29. 32ビットと64ビットマシンの両方で常に64ビットです
- 30. 現代のファイルシステムでの断片化
64ビットオペレーティングシステムでは問題ありません。 –
このコメントは回答ではありませんか?既存の答えは、それが64bitの問題であることを暗示しているようです。 – paulm