在电脑运算中,内存地址是一种用于软件及硬件等不同层级中的数据概念,用来访问电脑主存中的数据。内存地址有许多类型。换句话说,一个电脑,甚至在一个程序内,可能即存在数个不同的内存“定址空间”。
在电脑运算中,内存地址是一种用于软件及硬件等不同层级中的数据概念,用来访问电脑主存中的数据。
在 8086 的实模式下,把某一段寄存器左移 4 位,然后与地址 ADDR 相加后被直接送到内存总线上,这个相加后的地址就是内存单元的物理地址,而程序中的这个地址就叫逻辑地址(或叫虚地址)。在 80386 的保护模式下,这个逻辑地址不是被直接送到内存总线,而是被送到内存管理单元(MMU)。MMU 由一个或一组芯片组成,其功能是把逻辑地址映射为物理地址,即进行地址转换。
当使用 80386 时,我们必须区分以下三种不同的地址:
逻辑地址:机器语言指令仍用这种地址指定一个操作数的地址或一条指令的地址。这种寻址方式在 Intel 的分段结构中表现得尤为具体,它使得 MS-DOS 或 Windows 程序员把程序分为若干段。每个逻辑地址都由一个段和偏移量组成。
线性地址:针对 32 位 CPU,线性地址是一个 32 位的无符号整数,可以表达高达 232(4GB)的地址。通常用 16 进制表示线性地址,其取值范围为 0x00000000~0xffffffff。对 64 位 CPU,线性地址是一个 64 位的无符号整数,可以表达高达 264。
物理地址:也就是内存单元的实际地址,用于芯片级内存单元寻址。物理地址也由 32 位无符号整数表示。
内存地址有许多类型。换句话说,一个电脑,甚至在一个程序内,可能即存在数个不同的内存“定址空间”。
电脑的内存(尤其是指主存)是由许多“内存地址”所组成的,每个内存地址都有一个“物理地址”,能供 CPU(或其他设备)访问。一般,只有如 BIOS、操作系统及部分特定之公用软件(如内存测试软件)等系统软件,能使用机器码的运算对象或寄存器对物理地址定址,指示 CPU 要求内存控制器之类的硬件设备,使用内存总线或系统总线,亦或分别之控制总线、地址总线及数据总线,运行该程序之命令。内存控制器的总线是由数条并行的线路所组成的,每条线路表示一个比特。总线的宽度因此依电脑不同,决定了可定址之存储单位数量,以及每一单位内的比特数量。
计算机程序使用内存地址来运行机器码、存储及截取数据。大多数的应用程序无法得知实际的物理地址,而是使用电脑的内存管理单元及操作系统的内存映射,为“逻辑地址”或虚拟地址定址。