逻辑地址、线性地址、物理地址

本文介绍了计算机内存管理系统中的三种地址类型:逻辑地址、线性地址和物理地址。逻辑地址由程序生成,经分段机制转化为线性地址;线性地址在分页机制下进一步转化为物理地址,或直接作为物理地址使用;物理地址则是内存单元的实际地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逻辑地址(Logical Address)是指机器语言指令中,用来指定一个操作数或者是一条指令的地址。需要程序员在程序中对指令、数据的地址进行编写、存放,并不是一个实际的地址,有时也称逻辑地址为虚拟地址


线性地址(Linear Address)是逻辑地址到物理地址变换之间的中间层,跟逻辑地址一样,它也不是一个真实的地址。程序代码会产生逻辑地址,在分段机制中,该逻辑地址就是段中的偏移地址,加上相应段的基地址就生成了一个线性地址;在分页机制中,那么线性地址可以再经变换以产生一个物理地址;若没有启用分页机制,那么线性地址直接就是物理地址


物理地址(Physical Address)是计算机为了唯一的标识一个内存单元,操作系统会给每一个内存单元编上一个绝对的号,计算机系统就通过这个编号来定为每一个内存单元的物理位置,这个编号称为内存的物理地址 ,是地址变换的最终结果地址。在分页机制中,线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。


### 逻辑地址线性地址、虚拟地址和物理地址的区别 #### 逻辑地址 逻辑地址也被称为有效地址或段内偏移地址,在任何CPU模式下都存在。它由程序产生的相对某个段寄存器的偏移量构成。例如,在实模式下的汇编指令 `mov ax, [0x7c00]` 中,`0x7c00` 就是一个逻辑地址[^3]。 #### 线性地址 当启用了分页机制时,线性地址作为从逻辑地址转换至物理地址过程中的过渡形式出现;而在未启用分页的情况下,则直接充当物理地址的角色。具体来说,线性地址是由逻辑地址(即段内的偏移地址)加上相应的段基址计算得出的结果。对于支持此特性的处理器架构而言,比如 Intel 80386 处理器家族成员所定义的最大可寻址范围可达4GB (2^32)[^2]。 #### 虚拟地址 在现代操作系统中广泛采用的一种抽象概念——虚拟地址实际上指的是应用程序视角下的线性地址。这意味着每个独立执行单元(如进程)都被赋予了一套统一而连续的地址区间供其自由支配,即使这些区域可能映射到了不相邻甚至散布于整个系统的不同部分的真实存储资源上。因此,借助这种间接层次的设计理念,软件开发者可以更加方便地编写代码而不必关心底层硬件细节[^4]。 #### 物理地址 最终被用来真正定位RAM芯片内部特定字节位置的信息便是所谓的物理地址。它是经过一系列复杂的变换流程之后得到的实际可用数值,用于指示具体的内存单元所在之处。只有在这个阶段,计算机才能确切知道要读取或写入的数据究竟位于哪里[^1]。 ```cpp // 示例:展示如何获取当前平台上的页面大小 #include <unistd.h> longpagesize=getpagesize(); printf("Page size:%ld\n",pagesize); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值