0

0

Win32之内存管理之虚拟内存跟物理内存

看不見的法師

看不見的法師

发布时间:2025-05-09 10:28:16

|

863人浏览过

|

来源于php中文网

原创

一、虚拟内存与物理内存

我们知道,每个应用程序都拥有自己独立的4GB空间。例如,假设A进程在地址123处存储了值10,而B进程在地址123处存储了值20,这两个进程互不影响。然而,这些值是真实存在的,并且存储在物理内存中。如下图所示:

Win32之内存管理之虚拟内存跟物理内存

根据上图,我们可以区分虚拟内存和物理内存。如果我们修改了物理内存的值,那么会影响A进程或B进程。

当然,如果你学过内核驱动开发,就知道内核驱动读写正是这种机制。我也曾编写过一个简单的内核驱动读写程序,详情请查看内核驱动目录。

因此,虚拟内存是虚构的,只有在使用时才会映射到物理内存中。

二、物理内存的管理

物理内存是以4KB(即4096字节)的方式进行管理的,这一单位也称为一页。因此,在使用API时,我们经常会看到与页相关的操作,这是因为内存是以页为单位进行管理的。

如下图所示:

Win32之内存管理之虚拟内存跟物理内存

进程A的值被放置在物理页中。

传统上,进程拥有4GB的地址空间,但实际上分为高2GB和低2GB。高2GB由内核使用,因此用户只能使用低2GB。而低2GB中也有高低各64KB的部分是不可用的(如果学过内核,可以通过构造来使用)。

如下图所示:

Win32之内存管理之虚拟内存跟物理内存

用户模式可以使用的内存是橘黄色部分,但没有对应的物理页。只有当我们申请内存时,才会有对应的物理页。

如果想查看三环程序使用的物理页,可以通过双机调试来调试我们的程序,使用Windbg进行操作:

  1. 首先使用命令!Process遍历出我们程序的EXE地址。
  2. 使用dt EPROCESS遍历出的地址,得到这个应用程序的EPROCESS结构。
  3. 得到EPROCESS结构中偏移11c(即成员VadRoot)的地址,使用!VAD地址(EPROCESS + 地址)可以得出这个EXE使用的内存物理页。

如果你不会使用也没关系,观看下图:

Win32之内存管理之虚拟内存跟物理内存

此图说明了我们的线性地址从10开始到10结束。因为物理页是以4KB存储的,所以10代表的是1000,后面的大小是1000,因此下一个位置从20开始,即2000线性地址。

Android 本地数据存储 中文WORD版
Android 本地数据存储 中文WORD版

本文档主要讲述的是Android 本地数据存储;对于需要跨应用程序执行期间或生命期而维护重要信息的应用程序来说,能够在移动设备上本地存储数据是一种非常关键的功能。作为一名开发人员,您经常需要存储诸如用户首选项或应用程序配置之类的信息。您还必须根据一些特征(比如访问可见性)决定是否需要涉及内部或外部存储器,或者是否需要处理更复杂的、结构化的数据类型。跟随本文学习 Android 数据存储 API,具体来讲就是首选项、SQLite 和内部及外部内存 API。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以

下载

三、物理页大小

物理页的大小根据你的物理内存大小来设定。也就是说,你的物理内存有多大,就可以换算出物理页的数量。我们可以通过任务管理器查看物理页的总数。

例如,如下图所示:

Win32之内存管理之虚拟内存跟物理内存

我们换算一下,1048048 / 4转换为16进制就是可以有多少个物理页。例如,我们的例子中有3FF7C个物理页。

我们也可以使用Windbg通过dd命令查看,只需DD这个变量即可。

Win32之内存管理之虚拟内存跟物理内存

如果我们的物理页超过了,那么操作系统还支持使用硬盘来作为物理内存。

具体设置如下:

计算机属性 -> 高级系统设置 -> 高级 -> 性能设置 -> 高级 -> 虚拟内存更改。

Win32之内存管理之虚拟内存跟物理内存

这块内存会在Windows上保存,文件名为pagefile.sys,通常是C盘的隐藏文件。我们可以通过EveryThing搜索找到它。

Win32之内存管理之虚拟内存跟物理内存

三、操作系统可识别内存

我们可用的内存是我们计算出的物理页大小加上虚拟内存的大小。然而,操作系统可识别的内存并不是这么大。

也就是说,即使我们增加了很多内存条,也不会有任何效果。

32位系统下最多能识别64GB内存,而WinXP只能识别4GB内存。具体知识需要学习Windows内核中的页表(PTE、PDE)、页目录表等才能清楚,这里就不多说了,只需了解即可。

相关专题

更多
windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

512

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1048

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

743

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

412

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2343

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

764

2023.08.10

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

1480

2023.08.28

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

1588

2023.08.30

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 1.7万人学习

XML教程
XML教程

共142课时 | 5.3万人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号