虚拟内存与物理内存

虚拟内存与物理内存的对应关系

  1. 虚拟内存 每个进程拥有独立的4GB 虚拟地址空间,地址范围:0x00000000 ~ 0xFFFFFFFF
    ⚠ 虚拟地址不是真实物理内存地址,只是一套进程内的逻辑地址
  2. 物理内存
    ● 真实硬件内存,程序数据最终保存在物理内存
    ● 不同进程相同虚拟地址,可以映射到完全不同的物理地址,进程之间内存隔离互不干扰
    ● OS 通过页表完成虚拟地址 ↔ 物理地址的转换

虚拟内存的大小与地址划分(32 位 Windows)

整个 4GB 地址空间对半划分:

区域 地址范围 特性
用户空间(低2GB) 0x00000000 ~ 0x7FFFFFFF 每个进程独立,用户程序可操作
内核空间(高2GB) 0x80000000 ~ 0xFFFFFFFF 所有进程共享同一份内核空间

用户空间内部细分

  1. 前 64KB 空指针赋值区:0x00000000 ~ 0x0000FFFF,禁止访问,捕获空指针错误
  2. 用户模式可用区:0x00010000 ~ 0x7FFEFFFF,程序使用的地址区域
  3. 后 64KB 禁入保护区:0x7FFF0000 ~ 0x7FFFFFFF,紧邻内核空间,防止用户代码越界访问内核
    管理粒度:4KB 一页,按需分配
    只有真正访问虚拟地址时,才分配物理内存
    VAD(虚拟地址描述符)
    ● WinDbg 命令:!vad,查看进程 VAD 树
    ● 一个 VAD 节点代表一段已经分配的虚拟地址区间,不在 VAD 树中的地址就是未分配
    ● 用途:排查内存泄漏、查看进程内存布局

物理内存

  1. 管理单位:4KB / 页,称为物理页
  2. 物理内存上限 = 机器实际内存条容量
    公式:
    物理页总数 = 物理内存总大小(KB) ÷ 4KB
    物理内存总量(KB)=MmNumberOfPhysicalPages * 4
  3. WinDbg 查看物理页总数命令:
cpp 复制代码
dd MmNumberOfPhysicalPages

取出数值为物理页数量,乘以 4 得到 KB 单位内存

32 位系统内存识别限制

● 硬件理论上限:32 位架构最多识别64GB 物理内存

● Windows 系统版本限制:

○ WinXP:最多识别 4GB(内核人为限制,可通过 Hook 补丁突破)

○ Windows2003 服务器版:可识别 4GB 以上内存

注意:架构本身不限制,是操作系统内核做的限制

页面交换文件 pagefile.sys

● 文件位置:C 盘根目录,默认隐藏系统文件

● 作用:物理内存不够时,把不活跃内存数据写入硬盘这个文件,腾出物理内存

● 程序可用内存 = 物理内存 + pagefile.sys 虚拟内存

● 设置入口:系统属性 → 高级 → 性能设置 → 高级 → 虚拟内存更改

✅区分:

● 进程 4GB:虚拟地址空间(逻辑地址)

● pagefile.sys:硬盘充当内存的交换文件,二者不是同一个东西

核心机制:按需分配 & 缺页异常

  1. 按需分配:申请虚拟地址,不会立刻分配物理页;只有访问的时候才分配物理内存
  2. 缺页异常触发:访问已经分配虚拟地址,但没有挂载物理页时触发缺页中断
  3. 缺页异常 OS 处理流程:
    a. 校验虚拟地址合法性
    b. 分配物理页,建立页表映射
    c. 如果数据在 pagefile,从硬盘交换文件读取数据载入物理页
    d. 返回用户程序继续执行,应用完全无感知
  4. 比喻:七个坛子八个盖 物理页数量少于虚拟内存对应的 "坛子",依靠局部性原理,不活跃页面换入磁盘,活跃页面放在物理内存,动态轮换

总结

  1. 每个进程独立 4GB 虚拟地址;内核空间所有进程共享
  2. 虚拟地址≠物理地址,页表负责映射,进程内存隔离
  3. 内存按 4KB 页管理,虚拟内存延迟按需分配物理页
  4. VAD 描述已分配虚拟地址,WinDbg !vad查看;MmNumberOfPhysicalPages查看物理页总数
  5. pagefile.sys 是硬盘交换文件,物理内存不足时换页,缺页异常对程序透明
  6. 32 位 CPU 理论可识别 64GB 内存;XP 系统内核限制仅识别 4GB
相关推荐
用户9562562542917 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
2601_9679801117 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
flyingonpine18 小时前
PowerShell脚本数字签名实战:自签名证书、代码签名与信任链验证
windows·信任链
曾令胜1 天前
云服务器被攻击后分析恶意脚本修复漏洞
网络安全·安全威胁分析
goehou1 天前
让 AI 替我操作这台电脑,先把手能伸多远定下来
windows·自动化·权限管理·ai agent
公子小六1 天前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
用户298698530141 天前
Python 实战:把代码写入 Word 文档的两种实现方式
后端·python·api
qq_158895411111 天前
AI 音乐生成完成后,音频 URL 为什么会过期?一套可恢复的交付方案
python·api·ai音乐
JonaHu1 天前
5分钟搭建帮你赚钱的 AI API 网站:从品牌门户到客户 Key 交付
人工智能·api·开发者·ai创业·acedatacloud
菩提小狗2 天前
每日安全情报报告 · 2026-11-09
网络安全·漏洞·cve·安全情报·每日安全