我知道/燃烧记忆switch 在 Windows 上的作用,但我想了解 Windows 在底层做了什么来支持它。
它在 msdn 上被描述为“Windows 无法使用的内存量(以兆字节为单位)”。
这是否仅仅意味着内核不允许用户将虚拟内存映射到该区域?内核如何实现这一点?设置 burnmemory 时内核还会做出其他限制吗?
答案1
当你使用开关burnmemory
,Windows 内核将从内存映射的底部开始向上减少物理可访问的内存量。内核不允许用户在此区域进行虚拟内存映射,因为内核本身不允许映射低于限制的内存burnmemory
。
当你使用该开关启动计算机,内核确定总物理内存,计算最高可寻址物理地址(从总 RAM 减去给定的兆字节值)后考虑到系统内存分配中的任何差距(从启动时或其他系统使用),并将其设置为下限 RAM 地址限制。
但请注意,计算出的地址与使用开关不同maxmem
。maxmem
开关将使用您指定的兆字节值作为可寻址内存的直接硬限制(因此总用户空间内存通常为轻微地小于您设置的大小)。burnmemory
开关会将您指定的值与内存地址或系统保留地址中的任何间隙组合来计算最小地址(因此总的用户空间内存集就是您设置的大小)。
从内核角度来看,此开关实际上修改了最低可能的内存地址(内核认为结束地址是系统内存的物理起始地址)。任何试图访问范围外内存的应用程序都会触发 DEP 或 BSOD。