You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位Windows重叠MMF视图是否会导致内存重复占用?

Windows文件映射的内存复用与视图内存表现

内存占用的实际情况

Windows的文件映射机制(通过CreateFileMapping/MapViewOfFile系列API实现)会自动复用物理内存页,不会将同一文件的相同内容重复加载到内存中,完全避免了不必要的内存浪费。

就你描述的64位极端场景来说:当你创建16个1MB的文件映射视图,每个视图按64K粒度偏移重叠时,操作系统会识别出这些视图指向的是文件的重复页内容,只会把唯一的文件页加载到物理内存一次。具体计算下来,16个视图覆盖的文件范围是0到1FFFFF(总计2MB),扣除重叠的64K部分,实际物理内存占用约为2MB-64K,和你预期的一致。

这背后依赖的是Windows的分页管理机制:文件映射的核心单位是内存页(你提到的64K是视图的对齐粒度,属于对齐后的页块),每个文件页会被映射到物理内存的一个页帧,多个虚拟视图可以通过页表关联到同一个物理页帧,实现物理页的共享。只要文件内容未被修改(或修改后未触发写时复制的私有副本),物理页就会被所有重叠视图共享。

汇编层面的视图表现

从用户视角(包括汇编代码层面)来看,每个映射视图都是独立的连续虚拟内存块。

每次调用MapViewOfFile都会返回一段连续的虚拟地址区间,汇编代码访问这些地址时,看到的是完全连续的虚拟内存空间——比如第一个视图的虚拟地址可能是0x10000000到0x100FFFFF,第二个是0x10100000到0x101FFFFF,以此类推。这些虚拟地址在汇编层面是连续且相互独立的,代码不需要关心底层物理页的复用逻辑,只需要按返回的虚拟地址进行连续访问即可。


内容的提问来源于stack exchange,提问作者Zoltán Bíró

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:27:19