2017-04-13 8 views
2

私はWindowsでメモリ管理を学んでいます。私は、ウィンドウ内のプロセスがデフォルトでヒープを持っていることを知っています。これは将来拡張できます。また、プロセスは追加の(プライベート)ヒープを作成することができます。ウィンドウでプライベートヒープを作成できるのはなぜですか?そのようなアプローチの利点は何ですか?既定のヒープ(再割り当ての可能性あり)の使い方は分かります。または、再割り当てを最適化する別の方法ですか?ウィンドウでプライベートヒープを作成できるのはなぜですか?

+0

'HeapDestroy'を呼び出すことで、もう不要なものを即座に解放することができます(オブジェクトを個別に解放するために高価な散歩をするのではなく)という大きな利点があります。または、MSDNの記事(https://msdn.microsoft.com/library/ms810603)によれば、「[...]ヒープメモリの利点の1つは、従来のデータのニーズをどれだけうまく満たすかということですバイナリツリー、リンクリスト、ダイナミックアレイなどの構造体があります。ヒープハンドルを持つことで、これらの構造体を一意に識別することができます。 " –

+2

プライベートヒープが実際のヒープでどのように使用されたかを示す[ここには物語があります](https://blogs.msdn.microsoft.com/ricom/2006/02/02/unmanaged-memory-fragmentation-an-old-story/)世界のシナリオ:スレッドの競合を減らし、断片化を減らす。 –

答えて

3

HeapCreateを見ると、ヒープの動作方法を変更するオプションが複数あることがわかります。 HEAP_NO_SERIALIZEは速くなりますが、自分自身でスレッド同期を処理する必要があります。

異なる寿命の異なるオブジェクトを割り当てると、複数のヒープを持つことも有益です。断片化を減らすために作業の一環として割り当てられ、割り当てが解除された小さなオブジェクト(およびマルチスレッドの場合はロックの競合)が頻繁に発生する場合は、長い長寿命のオブジェクトを独自のヒープに配置することもできます。

コメントに記載されているように、HeapDestroyを呼び出してすべての割り当てとヒープ自体を1回の呼び出しで解放することができますが、そこに割り当てられたすべての機能を完全に制御できる場合にのみ意味があります。デフォルトのヒープを破棄することは許されていないので、このトリックを使用するために独自のプライベートヒープを作成する必要があります。

関連する問題