j'ai rencontré une question intéressante:Pourquoi HBITMAP utilise-t-il si peu de mémoire?
- charge un grand (4500x6000) jpeg en mémoire (RGBRGBRGB ....) par libjpeg (coût de la mémoire 200M)
- CreateDIBitmap() pour créer un HBITMAP de la données
- la mémoire utilisée
maintenant je trouve que seulement la mémoire 5M l'utilisation de processus du tout. Je me demande où sont les données du HBITMAP. (Désactiver pagefile)
mise à jour:
j'écrire un code pour le test:
// 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);
}
les données sont 0x2d0000 (sûrement dans l'espace utilisateur), bitmap.bmBits est également 0x2d0000 . Donc, je m'assure que CreateDIBSection utilise la mémoire de l'espace utilisateur pour bitmap.
Comment savez-vous combien de mémoire il utilise? Si vous regardez simplement le gestionnaire de tâches, ce n'est pas toujours une jauge précise. –