直接引用数字地址的C程序,这些进程在物理上指的是同一个地方?

Jae*_*Kim 3 c memory

假设我们编译了一个直接引用数字地址的C程序,然后执行了两个.那么这两个过程在物理上指的是同一个地方?如果没有,你怎么能参考不同的物理空间?

rus*_*tyx 7

这取决于实际平台.在许多嵌入式系统上可能就是这种情况,但是例如在受保护模式下的x86上,每个应用程序都有自己的地址空间,虚拟内存管理器将每个应用程序的虚拟地址转换为物理内存地址.这样,应用程序最终会彼此隔离,并且可以使它们的代码在完全相同的地址运行.

当进程(或模块)必须共享相同的地址空间时,常见的技术是使用可重定位的二进制文件,也称为与位置无关的代码.这是通过在链接时创建一个修复表并在加载后立即"修复"加载的二进制文件来实现的.


das*_*ght 6

答案取决于硬件.

在具有虚拟内存管理的系统上,进程在其自己的"沙箱"中运行,并且可以使用整个内存空间.多个进程可以访问相同的地址,但虚拟内存管理器会在物理地址空间中为每个进程分配一个单独的页面,因此这两个进程不会"冲突"在内存中的同一个项目上.

在没有虚拟内存管理的系统上没有保护:如果两个进程引用相同的地址,它们将访问内存中的相同位置.

注意:访问尚未分配给程序的地址是未定义的行为.因此,访问硬编码地址的程序可能无效.