首页 > 解决方案 > 为什么 32 位 Windows 应用程序“不需要释放使用 LoadResource 加载的资源”?

问题描述

FreeResource 函数中 - Microsoft Docs

[此功能已过时,仅支持向后兼容 16 位 Windows。对于 32 位 Windows 应用程序,不必释放使用 LoadResource 加载的资源。如果在 32 或 64 位 Windows 系统上使用,此函数将返回 FALSE。]

这是为什么?是因为内存大吗?

标签: winapi

解决方案


专门的资源特定功能,例如LoadBitmap()将实际资源“后处理”为可用的 GDI 对象,这会消耗额外的内存和系统范围的 GDI 表中的插槽(仅限于 64K 句柄)。因此,有必要在DeleteObject()完成后调用HBITMAP以释放相关资源。

LoadBitmap()(和 16 位 Windows 不同)不同,LoadResource()在 Win32 中不分配任何额外资源,而是“指向”已加载模块的内存映射映像中的资源。因此,在 Win32 中没有什么FreeResource()需要清理的。

引用 Raymond Chen 的FreeResource 和 DestroyAcceleratorTable 之间有什么区别

在 16 位 Windows 中,加载资源需要分配一块内存,然后从磁盘映像中填充该内存块。在 Win32 中,资源作为映像的一部分映射到地址空间;没有内存分配,也没有显式加载。


推荐阅读