Far*_*kht 2 windows embedded-resource portable-executable visual-c++
在C++中使用PE文件中包含的资源(例如二进制资源)时.我们要先打个电话
1)FindResource然后
2)LoadResource
访问资源.
关于函数名称"LoadResource"的准确性我想知道"Windows Loader"是否确实在加载其他部分(如代码或数据部分)时加载了内存中应用程序的所有资源,或者只在我们需要它们时才加载延迟?
如果是这样,我们可以在使用它们之后卸载这些资源以释放分配的内存吗?
这些功能很旧,它们可以追溯到尚未支持虚拟内存的Windows版本.回到过去,他们实际上会将资源物理加载到RAM中.
那些日子早已过去,OS加载程序创建一个内存映射文件,将可执行文件映射到内存中.当程序取消引用指针时,文件(代码和资源)中的任何内容都只映射到RAM中.您只需支付使用的费用.
所以LoadResource()做的很少,它只是返回一个指针,伪装成一个HGLOBAL句柄.LockResource()没有任何意义,它只是将HGLOBAL强制转换为指针.当你真正开始使用它时,你将绊倒页面错误,内核读取文件,将其加载到RAM中.UnlockResource()和FreeResource()什么都不做.如果操作系统需要另一个进程的RAM,那么它可以取消映射资源的RAM.没有什么需要保留,因为内存由文件支持,页面可以简单地丢弃.如果再次使用该资源,则在必要时重新登录.
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |