admin管理员组文章数量:1516870
应用程序中使用的内存是虚拟内存地址,硬件设备中存放的地址是实际内存地址,操作系统通过CPU的内存管理单元(MMU)实现虚拟内存和实际内存的映射关系。操作系统管理内存主要有两种方式,为内存分段和内存分页。
内存分段
内存是由不同的分段组成的,各个段之间是相互独立的。
虚拟地址由两部分组成,分别是段选择因子和段内偏移量。
段表常用由两部分组成,分别为段基地址和段界限,段基地址是该段在物理内存中的起始地址,段界限指的是该段的实际内存大小。
通过段选择因子中的段号,查询段表中的段基地址,加上段内偏移量,获取物理地址。
内存分页
内存分页是把整个虚拟和物理内存空间切成一段固定尺寸的大小。这样一个连续并且尺寸固定的内存空间,我们叫页。在 Linux 下,每一页的大小为 4KB 。
虚拟地址由两部分组成,由页号和页内偏移量组成。
虚拟地址与物理地址通过页表映射,页表由虚拟页号和物理页号组成,虚拟页号主要对应虚拟地址中的页号,物理页号指的是实际内存中的页号。
用过虚拟地址中的页号查找页表,获取物理页号,加上页内偏移量,获取实际地址。
区别:
1. 内存划分方式
分页(Paging)
将物理内存和逻辑内存划分为固定大小的块
物理内存的页称为页框,逻辑地址空间的页称为虚页
通过页表将逻辑页号映射到物理页框号
分段(Segmentation)
按程序的逻辑单元划分内存,例如代码段、数据段、堆段、栈段等
每个段的大小不固定,由程序的实际需求决定
通过段表记录每个段的基址和界限
2. 地址空间
分页
一维地址空间:用户只需提供逻辑地址,由硬件自动拆分页号和页内偏移
程序员无需感知分页的存在
分段
二维地址空间:用户需显式指定段号和段内偏移
程序员可能需要关注段的划分
3. 碎片问题
分页
产生内部碎片:页是固定大小,若分配给进程的最后一页未填满,剩余空间被浪费
无外部碎片,因为页框可灵活分配
分段
产生外部碎片:内存中存在大量不连续的小块空闲空间,难以利用
无内部碎片,因为段按需分配
4. 透明性与用户视角
分页
对程序员完全透明,由操作系统和硬件自动管理
用户看到的逻辑地址是连续的,物理地址可能分散
分段
对程序员可见,支持显式按逻辑划分内存
更符合程序的自然结构
版权声明:本文标题:Adobe Flash Player中的内存奥秘:一探分段与分页如何优化应用性能 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/web/1772344729a3273791.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论