タグ

2021年7月27日のブックマーク (2件)

  • ヒープに関する話題 - Web/DB プログラミング徹底解説

    VirtualAlloc 系ではページ単位でメモリを操作する。このため(アクセス権の設定の面で)柔軟であるが小さなメモリブロックの割り当てに向かない。一 方 HeapAlloc 系では、予めある程度 の仮想メモリ 領域を予約しておき、プログラムから要求がされ次第、その予約された領域からメモリを切り出してきてメモリブロックを確保する。小さなメモリブロックを多 数割り当てるにはこちらの方法のほうが効率が良い。Windows のヒープマネージャはこのような動作を実現できるように、プログラムと仮想メモリマネージャの間に入りメモリ割り当てを高速に行う。 DEPWindows XP SP2 から HeapAlloc によって割り当てられるメモリ (ページ) の属性が変わり、割り当てられるメモリブロックでは実行可能ではなくなった。もし実行しようとするとアクセス違反が発生する。このテクノロジを Data

    ヒープに関する話題 - Web/DB プログラミング徹底解説
  • low-fragmentation heap - espresso3389の日記

    会社で開発しているアプリケーションで、プログラムの[閉じる]ボタンを押しても数秒間固まったままになるものがあった。別に、WaitForXXXObject(s)しているわけでもないし、そんなに重い処理をしている訳でもない。理由がわからないまましばらく放置していたのだが、今日になってやっと原因が判明した。たった一つのdeleteに数百ミリ秒のオーダーで時間が消費されていた。別にデストラクタがあるわけでもないクラスのインスタンスでだ。 いろいろと調べたところ、ヒープの断片化が激しいらしい。かといって、断片化を防ぐコードを書くのもなかなか難しい。いくつかのインスタンスには、無理矢理compact()っていう関数を導入してみて、適宜、メモリの再確保によって断片化を押さえるようにしたものの、全体的には、あんまり改善できず。 仕方がないので、ちょっとだけ調べてみると、Windows XP以降では、low

    low-fragmentation heap - espresso3389の日記