どーも、Windowsのメモリ確保系APIの挙動が理解できません。説明読んでも理解できません。(ダメすぎ^^;)
(以下、書くことはあいまいな知識を元に書いています。信用しないでください^^;)
とりあえず、比較的大きいメモリを確保したかったので(1MBぐらい)、new BYTE[] するのは、何となく嫌だなぁ〜…と思い、VirtualAlloc を使ってメモリ確保したんです。で、確保したメモリをLockしないといけないよな〜なんて思って、VirtualLock しようとしたら……ロック失敗。ナゼ……。
VirtualAlloc したサイズ分ぴったしにLockしてるんだけどなぁ〜…
なんて悩んでたんですが、どーも VirtualLock しなくてもCOMMITしてれば、メモリは使えるようですな。(どーりで、戻り値がハンドルじゃないわけだ…)
DirectXつかってると、確保したメモリはLockしてから使わなきゃいけないというオキテが(一応)ありますから、そういうい考えをしてしまいましたわ。
じゃぁ、VirtualLockって何なのよ?って感じですが、コレは単に「オンメモリを保証する」ようなものっぽいですね。メモリに確実に乗っている事が保証できれば、高速に処理が可能になりますし。
ただ、VirtualLockは、デフォルトの状態だとロックできる最大メモリサイズが小さいため、あまり大きなメモリ空間をLockしようとするとコケル模様です。
以上、ややこしくなったのでまとめ。(ついでに間違ってたら誰かツッコミよろ^^;)
・VirtualAlloc の戻り値は、COMMITしてればすぐに使える。
・VirtualLock は、必要なときだけ使おう。
・VirtualLock は、あんまり大きなメモリはLockできない。 DefaultMax 30Page!