【发布时间】:2010-01-24 14:27:34
【问题描述】:
我遇到了一个有趣的问题:
- 通过 libjpeg 将大 (4500x6000) jpeg 加载到内存 (RGBRGBRGB....) 中(大约需要 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 将用户空间内存用于位图。
【问题讨论】:
-
你怎么知道它使用了多少内存?如果您只是查看任务管理器,那并不总是准确的衡量标准。
标签: winapi bitmapdata