繁体   English   中英

为什么虚拟内存地址在不同的进程中是相同的?

[英]Why Virtual Memory Address is the same in different process?

http://i.stack.imgur.com/RGMsz.png

我知道虚拟内存在Windows中分离2G(用于内核)/ 2G(用户)。 但为什么变量的地址不是连续堆栈?

喜欢0x22ff74,0x22ff78,0x22ff82,0x22ff86? 这是否意味着Windows在用户进程中使用沙盒机制?

这正是虚拟内存的本质。 操作系统为每个程序提供自己的专用地址空间。 实际上,操作系统负责将这些虚拟地址映射回物理地址空间而不需要应用程序知晓。

正如您所注意到的,这意味着两个应用程序可以在程序中的同一虚拟地址中拥有不同的数据。

了解更多关于虚拟内存的位置

您是否混淆了物理地址和虚拟地址? 两个进程可以访问同一个虚拟地址,因为每个进程都可以看到自己的虚拟内存空间。 另一方面,所有进程在机器中共享相同的物理内存空间,因此每个进程将具有映射到不同物理地址的相同虚拟地址(假设没有共享内存)。

让我以另一种方式阐述它。 进程X在机器A上运行,同一程序在机器B上作为进程Y运行。如果程序的某个全局变量在两台机器上占用相同的内存地址,这是否重要? 他们是不同的! 同样,如果该全局变量存储在一个进程实例的XYZ位置,则另一个进程实例可能具有该全局变量的相同虚拟地址 (XYZ)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM