假设我们编译了一个直接引用数字地址的C程序,然后执行了两个.那么这两个过程在物理上指的是同一个地方?如果没有,你怎么能参考不同的物理空间?
答案取决于硬件.
在具有虚拟内存管理的系统上,进程在其自己的"沙箱"中运行,并且可以使用整个内存空间.多个进程可以访问相同的地址,但虚拟内存管理器会在物理地址空间中为每个进程分配一个单独的页面,因此这两个进程不会"冲突"在内存中的同一个项目上.
在没有虚拟内存管理的系统上没有保护:如果两个进程引用相同的地址,它们将访问内存中的相同位置.
注意:访问尚未分配给程序的地址是未定义的行为.因此,访问硬编码地址的程序可能无效.