興味深い質問に出会いました:
- 大きな(4500x6000)jpegをlibjpegでメモリ(RGBRGBRGB ....)にロードします(約200Mのメモリが必要です)
- データから HBITMAP を作成する CreateDIBitmap()
- 使用中のメモリを解放する
今では、プロセスが 5M のメモリしか使用していないことがわかりました。HBITMAP のデータはどこにあるのだろうか。(ページファイルを無効にします)
アップデート:
私はテストのためにそのようなコードを書きます:
// initilise
BITMAP bitmap;
BITMAPINFO info;
// ....
void *data = NULL;
HDC hdc = ::GetDC(NULL);
HBITMAP hBitmap = ::CreateDIBSection(hdc, &info, DIB_RGB_COLORS, &data, NULL, 0);
::ReleaseDC(NULL, hdc);
if (hBitmap) {
::GetObject(m_hBitmap, sizeof(bitmap), &bitmap);
}
次に、データは0x2d0000(確かにユーザー空間にあります)で、bitmap.bmBitsも0x2d0000です。そのため、CreateDIBSection がビットマップにユーザー空間メモリを使用するようにします。