:3.962KB : :1 :2023-02-02 14:57:54
众所周知,32位程序理论上是不能 申请/读写 超过4GB内存的,不过这里的内只能指虚拟内存。
如果把这个概念拓展到物理内存,情况就完全不同了。
虚拟内存有 大小/读写 限制,不代表物理内存有 大小/读写 限制。(虚拟内存最终是映射到物理内存的)
如何申请物理内存?
微软其实是已经提供API的:AllocateUserPhysicalPages
如何读写物理内存呢?
很可惜,应用层不能直接读写物理内存,但是提供了API将物理内存映射到虚拟内存:MapUserPhysicalPages。
所以,AWE其实就是允许32位的程序申请物理内存(需要SeLockMemoryPrivilege权限),并允许程序将指定的物理内存映射到虚拟内存。
物理内存有多少取决于内存条大小。
所以可以利用这个方式很轻松地实现 申请超大内存/读写超大内存。
反复强调:这个方法并没有解除虚拟内存的限制!仅仅是允许将同一虚拟内存映射到不同的物理内存。
所以上面的图就很容易解释了。
01-0932位程序实现64位函数的真正底层调用
06-14物理内存驱动读写(注册表通讯)
12-21易语言软件所占的物理内存优化