Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
- ヒープ = ヒープ・マネージャは予めある程度の仮想アドレス空間を予約しておき、
プログラムから要求がされ次第、その予約された仮想アドレス空間に物理メモリを確保する。
このため、仮想アドレス空間に異なる小さな物理メモリを多数割り当てるときに性能が良い。
断片化 †
ただし、大量の異なるサイズの領域確保・解放を繰り返す場合は、断片化が発生する。
事例 †
ADO(MDAC)を使用して、大量データの結果セットを取得・解放を繰り替えすプログラムで
ADO(MDAC)の追加メモリを倍々でReservedするアルゴリズムによりに断片化が発生した事例がある。
低断片化ヒープ(LFH) †
Windows Server 2008からは、ヒープ・マネージャは低断片化ヒープ
LFH(Low Fragmentation Heap)がデフォルトでONに設定されている。
仮想アドレス空間のブロックのサイズの大小が影響して、断片化が問題になる。
このため実際にコミットできるのは仮想アドレス空間の半分程度になることもある。
- Windows Server 2008/Vista ではデフォルト ON
- Windows XP や Windows Server 2003 の場合
LFH を有効にするには、HeapSetInformation?関数を使う。
プロセス ヒープとプライベートヒープ †
プロセス ヒープ †
- プロセスの起動時には、ヒープは既定でひとつ用意される。
- プロセスヒープ (あるいはデフォルトヒープ、プロセスデフォルトヒープ
プライベートヒープ †
- 自前で作ったヒープ
- パフォーマンスの観点からヒープを独自に作成する。
参考 †
- インサイド Microsoft Windows 第4版のヒープマネージャの概論