驱动程序释放内存池后,Windows 是否会将内存池清零​​?

jsh*_*n28 6 windows memory

我正在研究在运行许多 Windows 服务器的主机上过度使用内存的可能性。虚拟机由Libvirt支持和管理QEMU / KVM。我目前的观察是,一旦 Windows Server 启动,QEMU 进程将占用与选项中定义的相同数量的RSS内存。另一方面,Linux 虚拟机的行为方式则不同,因为随着虚拟机的运行,它会逐渐消耗更多的内存。-m

过度提交内存的一种解决方案是启用KSM。但该解决方案的缺点是它确实需要一些时间来进行页面迭代和合并。因此它仍然可能允许在短时间内启动许多 Windows 服务器。

然后我看着记忆气球。我尝试给气球充气,然后立即放气,希望在主机上,RSS 不会增加。但显然事实并非如此。我观察到,气球一泄气,主机 RSS 内存就会增加。

我想知道 Windows 内存管理系统是否在调用ExFreePool或其他调用后自动将内存清零。

Bar*_*958 12

\n

我想知道 Windows 内存管理系统是否在 ExFreePool 或其他调用后自动将内存清零。预先非常感谢您的帮助。

\n
\n

它不是。实际上,它\xe2\x80\x99s 非常容易检查。编写一个简单的驱动程序,发出一系列带有随机请求池大小的 ExAllocatePoolXxx 调用,用已知模式填充分配的内存,例如 GUID 和每次递增的全局计数器。RtlFillMemory 调用后释放内存。通过转储池区域的最开始部分,开始检查您从 ExAllocatePoolXxx 获得的内容,在某个时刻,您将在您分配的内容中看到您自己的签名。

\n

  • 非常感谢。我将尝试这种方法并查看结果。 (3认同)