虚拟内存与物理内存

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

  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
相关推荐
小小小小钰儿1 小时前
2.1-Windows本地部署大模型
人工智能·windows·计算机·网络安全·操作系统·编程
菩提小狗1 小时前
每日安全情报报告 · 2026-10-01
网络安全·漏洞·cve·安全情报·每日安全
ayaya_mana2 小时前
MCTier 组网联机工具:安装、配置与私有化部署
网络·windows·内网穿透·联机
ysu_03143 小时前
Docker-Desktop-WSL2实战指南-Windows从安装配置到项目容器化
windows·python·docker·容器·composer·dockerfile·wsl2
shimly1234563 小时前
(undone) 解析 qemu-6.0.0 源码 (4) 添加 niubi board
windows
AAASilverwolf5 小时前
GPT-6 Sol 与 Luna 上线:Astra 的能力下放,价格却降了 50%?
人工智能·gpt·api
柳鲲鹏6 小时前
安装WIN11(26H2)时,忽略跳过TPM和SecureBoot检查
windows
weixin1997010801617 小时前
《1688物流API接口边界:logistics.trace.get 与 freight.template.list 的隐藏约束》(附Python源码)
windows·python·list
黄金龙PLUS1 天前
5个1280比特大状态置换算法的设计与分析
算法·网络安全·密码学·哈希算法·同态加密