一、 进程的虚拟地址空间
每个进程都有自己的虚拟地址空间。对于32位进程来说,这个地址空间的大小为4GB。对于64位进程来说,这个地址空间的大小为16EB。因为每个进程都有自己专属的地址空间,当进程中的各线程运行时,它们只能访问属于该进程的内存。线程既看不到属于其他的进程的内存,也无法访问它们。
虽然应用程序有这么大的地址空间可用,但是记住这只是虚拟地址空间——不是物理存储器。为了能够正常读/写数据,我们还需要把物理存储器分配或映射到相应的地址空间,否则将导致访问违规。
二、 虚拟地址空间的分区
每个进程的虚拟地址空间被划分为许多分区(partition)。
一般情况下进程的地址空间是这样划分的:
空指针赋值分区
用户模式分区
64KB禁入分区
内核模式分区
· 空指针赋值分区:保留分区的目的是为了帮助程序员捕获对空指针的赋值。如果进程中的线程试图读取或写入位于这一分区内的内存地址,就会引发访问违规。
当我们为变量分配内存的时候,需要判断内存有没有分配成功,不能想当然的认为分配一定会成功。因为地址空间中的这一分区是禁止访问的,所以会引发内存访问违规并导致进程被终止。
三、 地址空间中的区域
四、 给区域调拨物理存储器‘
五、 物理存储器和页交换文件