Windows - 此内存寻址如何工作?

Posted

技术标签:

【中文标题】Windows - 此内存寻址如何工作?【英文标题】:Windows - How does this memory addressing work? 【发布时间】:2013-11-29 05:17:29 【问题描述】:

假设 x86,我开始了解到地址 0x0 到 0x7FFFFFFF 用于进程;而任何更高的都是为内核保留的。

我有三个好奇心:

1) 进程是否调用了高于 0x7FFFFFFF 的地址?我认为它总是会导致某种访问被拒绝?拒绝访问是如何强制执行的?

2)“共享内存”IPC 是否通过将两个进程的虚拟地址映射到相同的物理地址范围来工作?

3) 您机器中的 RAM 容量可能会有所不同。您可能有 2GB,或者更像 16GB。这对 RAM 的寻址有何影响?内核是否曾经因为它是为自己保留但不需要它而留下一堆未使用的 RAM?我怎么能看到这个?

【问题讨论】:

【参考方案1】:

我不太确定,但你会在这个MSDN doc 中找到关于它如何工作的最大值:-

进程可用的虚拟地址范围是 称为进程的虚拟地址空间。每个用户模式 进程有自己的私有虚拟地址空间。对于 32 位 进程,虚拟地址空间通常是 2GB 范围 0x00000000 到 0x7FFFFFFF。对于 64 位进程,虚拟 地址空间是 8 TB 范围 0x000'00000000 到 0x7FF'FFFFFFFF。一系列虚拟地址有时称为 虚拟内存范围。

下图显示了两个 64 位进程的虚拟地址空间: Notepad.exe 和 MyApp.exe。每个进程都有自己的虚拟地址 从 0x000'0000000 到 0x7FF'FFFFFFFF 的空间。每个阴影 块表示一页(大小为 4 KB)的虚拟或物理 记忆。请注意,记事本进程使用三个连续的页面 虚拟地址,从 0x7F7'93950000 开始。但是那三个 虚拟地址的连续页面映射到非连续的 物理内存中的页面。另请注意,两个进程都使用一个页面 从 0x7F7'93950000 开始的虚拟内存,但那些虚拟页面 映射到物理内存的不同页面。

【讨论】:

以上是关于Windows - 此内存寻址如何工作?的主要内容,如果未能解决你的问题,请参考以下文章