winapi - 为什么 32 位 Windows 应用程序“不需要释放使用 LoadResource 加载的资源”?
问题描述
在FreeResource 函数中 - Microsoft Docs:
[此功能已过时,仅支持向后兼容 16 位 Windows。对于 32 位 Windows 应用程序,不必释放使用 LoadResource 加载的资源。如果在 32 或 64 位 Windows 系统上使用,此函数将返回 FALSE。]
这是为什么?是因为内存大吗?
解决方案
专门的资源特定功能,例如LoadBitmap()
将实际资源“后处理”为可用的 GDI 对象,这会消耗额外的内存和系统范围的 GDI 表中的插槽(仅限于 64K 句柄)。因此,有必要在DeleteObject()
完成后调用HBITMAP
以释放相关资源。
与LoadBitmap()
(和 16 位 Windows 不同)不同,LoadResource()
在 Win32 中不分配任何额外资源,而是“指向”已加载模块的内存映射映像中的资源。因此,在 Win32 中没有什么FreeResource()
需要清理的。
引用 Raymond Chen 的FreeResource 和 DestroyAcceleratorTable 之间有什么区别:
在 16 位 Windows 中,加载资源需要分配一块内存,然后从磁盘映像中填充该内存块。在 Win32 中,资源作为映像的一部分映射到地址空间;没有内存分配,也没有显式加载。
推荐阅读
- javascript - 编码图像中的隐藏消息
- javascript - 我如何为数组中的每个属性调用此函数?反应原生
- php - 为什么 foreach 循环中的 PHP Mysql 查询总是从数据库返回第一个结果?
- python - 如何获取图像文件名并将其发送到flask中的特征提取过程?
- html - 带引导带的偏移和中心容器
- css - 为什么 webpack 会以如此奇怪的方式处理 CSS?
- python - Google Santa Tracking Api 中圣诞老人当前位置的变量是什么?
- python - 使用 Python 请求发出自定义请求
- tensorflow - pytorch 中的 tf.function 属性
- flutter - 使用颤振共享偏好以节省颜色