Last Updated 2002/10/11 |
Programming Tips Windows | 索 引 |
メモリ管理
2002/10/11
GlobalAlloc にて 268MByte ほど確保しようとするとエラーとなってしまう. (正確には 268,435,352Byte) これは GlobalAlloc が内部エラーとしているからである. ( 0x0FFFFF98 より大きい場合はエラー) Windows95 などはヒープ管理に DWORD の上位 4bit を使用している. よって,サイズは 28bit(0x0FFFFFFF) までである.その値から管理データなどを引いた値が 0x0FFFFF98 と想像される. メモリマップドファイルはアドレスの 2G 〜 3G の領域に確保される. この領域は Win32 カーネル(KERNEL32, GDI32, USER32 等)や Win16 モジュール(KERNEL, USER, GDI 等や Win16 プログラム)が配置される. よってメモリマップドファイルの制限は 1G - モジュールサイズ となる. Ring3/Ring0 といったカーネルもこの領域を使用するので,あまり負荷をかけるのは得策ではない. 一方,VirtualAlloc は Win32 カーネルのヒープ管理対象外である. 4M 〜 2G のプライベート領域からページ単位でメモリを確保する. (ページ単位なので 4KByte のバウンダリ) だから仮想メモリの上限まで確保できるはずである. 参照 GlobalLockとGlobalFree メモリ確保 |
|