>>16
HeapSetInformationなんてものがあったんですね。

ところで上記のURLの中に出てきたHeapCreateの存在は
知っていましたが、いまいち使用用途がわかっていませんでした。
なので普段GetProcessHeapでデフォルトヒープを使っていましたが
なるほど。デフォルトヒープでのメモリアロケーションは
自分が明示的に呼び出すのとは他にそのプロセスの既定処理、
つまり内部(DefWindowProcの既定処理など)でもアロケートが行われていて
その時使用するのは当然デフォルトヒープだということ、
つまりその既定処理がヒープからメモリを確保しているときはそのヒープを
ヒープマネージャ(?)が排他ロックしている為にこちらで組み込んだメモリ確保処理を
実行した場合、その排他ロックが解除されるまでメモリ確保処理の制御が
戻ってこないということになるということですか。
(マルチスレッドでは特にそういう問題がでてくるのかな。。)


そういったオーバーヘッドを回避する目的で
「他でも使用される可能性がある」デフォルトヒープを使わず
独自の専用ヒープ領域を生成(HeapCreate)して
アロケーションを行うことで排他ロックでかかるオーバーヘッドを
改善できるということですね。(少し賢くなった気がする)

ただ、これは慣れていないと使いどころが難しそうな機能だと思います。
特定のスレッドのみがその専用ヒープを使う場合はHEAP_NO_SERIALIZE
を指定すると恐らくパフォーマンスがあがるのでしょうが、
使いどころを間違えると排他を行わないのであっさりクラッシュしてしまうのだろう。。