网站首页 > 文章精选 正文
直观对比
物理内存:也就是安装在计算机中的内存条,比如安装了 2GB 大小的内存条,那么物理内存地址的范围就是 0 ~ 2GB。这也是CPU可以直接进行寻址的内存空间大小
虚拟内存:虚拟的内存地址。由于 CPU 只能使用物理内存地址,所以需要将虚拟内存地址转换为物理内存地址才能被 CPU 使用,这个转换过程由 MMU(Memory Management Unit,内存管理单元) 来完成。虚拟内存大小不受物理内存 大小的限制,在 32 位的操作系统中,每个进程的虚拟内存空间大小为 0 ~ 4GB。
内存分布
程序中使用的内存地址都是虚拟内存地址,也就是说,我们通过 malloc 函数申请的内存都是虚拟内存。实际上,内核会为每个进程管理其虚拟内存空间,并且会把虚拟内存空间划分为多个区域,如下图:
- 代码段:用于存放程序的可执行代码。
- 数据段:用于存放程序的全局变量和静态变量。
- 堆空间:用于存放由 malloc 申请的内存。
- 栈空间:用于存放函数的参数和局部变量。
- 内核空间:存放 Linux 内核代码和数据。
虚拟空间都被映射到了磁盘空间中,(事实上也是按需要映射到磁盘空间上,通过mmap),并且由页表记录映射位置,当访问到某个地址的时候,通过页表中的有效位,可以得知此数据是否在内存中,如果不是,则通过缺页异常,将磁盘对应的数据拷贝到内存中,如果没有空闲内存,则选择牺牲页面,替换其他页面。
如果对没有进行映射的虚拟内存地址进行读写操作,那么将会发生 缺页异常。Linux 内核会对 缺页异常 进行修复,修复过程如下:
- 获取触发 缺页异常 的虚拟内存地址(读写哪个虚拟内存地址导致的)。
- 查看此虚拟内存地址是否被申请(是否在 brk 指针内),如果不在 brk 指针内,将会导致 Segmention Fault 错误(也就是常见的coredump),进程将会异常退出。
- 如果虚拟内存地址在 brk 指针内,那么将此虚拟内存地址映射到物理内存地址上,完成 缺页异常 修复过程,并且返回到触发异常的地方进行运行。
Mmap
mmap是用来建立从虚拟空间到磁盘空间的映射的,可以将一个虚拟空间地址映射到一个磁盘文件上,当不设置这个地址时,则由系统自动设置,函数返回对应的内存地址(虚拟地址),当访问这个地址的时候,就需要把磁盘上的内容拷贝到内存了,然后就可以读或者写,最后通过manmap可以将内存上的数据换回到磁盘,也就是解除虚拟空间和内存空间的映射,这也是一种读写磁盘文件的方法,也是一种进程共享数据的方法 共享内存.
转载自:
https://www.cnblogs.com/wiesslibrary/p/15689287.html?share_token=
a9950680-4125-46d7-90d7-3e3e1611a207
猜你喜欢
- 2025-05-03 物理内存32GB了,虚拟内存要关吗?可以关吗?
- 2025-05-03 Windows调大虚拟内存来代替升级物理运行内存(RAM)真的有用吗?
- 2025-05-03 VPN连接后 上网数据走物理网卡的设置方法
- 2025-05-03 物理虚拟实验室,仿真模拟实验过程
- 2025-05-03 在VLAN虚拟局域网中,通常是一个物理接口对应一个 VLAN
- 2025-05-03 还记得虚拟内存吗?可能就是你电脑故障的罪魁祸首
- 2025-05-03 酷酷云:浅析VPS、物理服务器、虚拟主机、云服务器之间的区别
- 2025-05-03 耳机7.1声道和双声道的区别(耳机7.1声道有什么优势)
- 2025-05-03 交换机常见的物理接口,虚拟端口及其配置案例
- 2025-05-03 厉害,iPhone 物理转换 eSIM 虚拟卡,将不是梦
- 05-05MyBatis的三种分页方式,你学废了吗?
- 05-05如何写一个简单的分页(最简单的分页)
- 05-05详解如何使用Spring Data JPA进行数据的分页与排序
- 05-05手速太快引发分页翻车?前端竞态陷阱揭秘
- 05-05前端分页机制的具体实现(分页前端需要做什么)
- 05-05一个后勾腿动作,有效疏通血管,改善下肢发麻,促进全身燃脂
- 05-05大型调相机起动及并网研究(什么是调相机,与发电机区别)
- 05-05你们都是托:动态对比度其实是骗你的
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)