10

私は、連続したメモリの大きなブロックを割り当てることは良い習慣ではないと常に確信してきました。メモリの断片化が発生すると、問題が発生する可能性が高いことは明らかです。ほとんどの場合、確実に排除することはできません (特に、サービスなどとして設計された大規模なプロジェクトでは)。

最近、私はITK画像処理ライブラリに出くわし、(事実上) 常に画像データ (3D でさえ、巨大かもしれない) を 1 つの連続したブロックとして割り当てることに気付きました。少なくとも 64 ビット プロセスでは、これは問題にならないはずだと言われました。ただし、64 ビット プロセスと 32 ビット プロセスの間に体系的な違いは見られませんが、仮想アドレス空間が大きいためにメモリの問題が遅れて発生する可能性があるという事実があります。

要点: 大量のデータを処理する場合、どのような良い方法があるのだろうか? 単純に 1 つの大きなブロックとして割り当てるか、割り当てのために小さな断片に分割する方がよいでしょうか?

もちろん、質問はシステム固有のものであるため、特にWindowsではネイティブ(アンマネージ、CLRなし)C++に制限したいと思います。ただし、可能であれば、より一般的なコメントにも興味があります。

4

1 に答える 1

6

質問はほとんど無意味に思えます...説明するために言い換えさせてください:

大きなメモリブロックが必要で、断片化が心配な場合は、自分で断片化する必要がありますか?

システムメモリマネージャにフラグメント化させるのではなく、自分でフラグメント化しても何も得られません。システムはこれに非常に優れており、あなたはそれを上手くやる可能性は低いでしょう。

そうは言っても、すべてが同じであれば、同じタスクを実行できますが、賢明な断片に分割されている場合は、何かを得ることができるかどうかをプロファイリングする価値があるかもしれません。しかし、一般的には、合理的な意味で何も得られません。OSをしのぐことはできません。

于 2012-07-03T08:06:43.907 に答える