Срещнах интересен въпрос:
- заредете голям (4500x6000) jpeg в паметта (RGBRGBRGB....) от libjpeg (струва около 200M памет)
- CreateDIBitmap(), за да създадете HBITMAP от данните
- освободи използваната памет
сега открих, че процесът използва само 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 използва паметта на потребителското пространство за растерно изображение.