我不知道为什么在Google上找到这个问题的答案如此困难,但是我想弄清楚一点。
是否以相同的方式处理win32资源?静态数据是在整个过程中将数据保存在RAM中的整个过程,还是将它们像常规文件一样保存在磁盘上,直到加载到内存中?诸如LoadResource / LoadString之类的函数暗含后者,但我想绝对确定自己不会被抽象所迷惑。
在较早的日子(例如Windows 3.1和更早的版本)中,资源是在加载期间复制到内存中的,您只需使用它们即可。内存管理器可以执行一些操作,例如将副本移动到内存中以整理磁盘碎片,甚至可以秘密地卸载资源,直到您再次需要它为止。当您需要资源时,还有第二步将其“锁定”到内存中。这为您提供了指向该副本的指针,并确保资源管理器在您再次将其解锁之前不会移动它。
在Windows的32位版本中,不会复制资源。可执行文件(或DLL)被映射到内存中,如果您触摸该资源,虚拟内存管理器将确保它在您那里。
API(FindResource,LoadResource,LockResource)反映了过去,具有对资源的句柄和对句柄的锁定等。但是现在的实现要简单得多,因为句柄只是指向资源开始的指针,并且锁定是有效的无操作,将句柄转换为指针类型并返回它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句