程序地址空间是指 程序在执行期间可以访问的内存范围。这个内存范围由操作系统为每个进程分配,以确保进程之间不会相互干扰。地址空间包含了程序所需的所有内存区域,包括代码、已初始化和未初始化的数据、堆(heap)、栈(stack)等。
程序地址空间可以分为逻辑地址和物理地址两种:
逻辑地址:
是程序在代码中使用的地址,不直接对应物理内存。每个进程都有独立的逻辑地址空间。
物理地址:
是程序实际访问的内存地址,由操作系统通过页表管理,将虚拟地址转换成物理地址。
在C/C++语言中,我们通常看到的地址都是虚拟地址,因为操作系统会负责将虚拟地址转换成物理地址,使得程序能够访问到实际的内存空间。
虚拟地址空间的大小由硬件平台决定,例如32位硬件平台的虚拟地址空间为0~2^32-1,即4GB,而64位硬件平台的虚拟地址空间则更大,理论上可以达到17179869184GB。
总结来说,程序地址空间是一个程序在执行期间可以访问的内存范围,由操作系统为每个进程分配,包括代码、数据、堆和栈等区域。程序使用虚拟地址进行访问,操作系统负责将这些虚拟地址转换成物理地址。