操作系统如何知道特定内存地址引用哪个虚拟页面?

问题描述 投票:0回答:1

我试图了解程序中分配的变量(例如 C++ 中的 new 关键字)如何转换为虚拟页面。

我的理解是,每个进程都会有自己的虚拟内存空间,并且这个空间会被分割成若干个固定大小(比如64字节)的页面。当我们在程序中分配内存时,我们从第一个地址开始向下移动。因此,如果我们分配 128 字节,我们将消耗两个页面,这两个页面都将被放入 MMU 页表中。

我难以理解的部分如下:

  • 如果我在内存中动态分配一个整数,我可能会拥有一个类似于 0x78C75ABC 的内存地址
  • 操作系统如何知道这个内存地址对应的虚拟页是什么?

我假设它基本上从 0 -> 内存地址开始计数,并将其除以固定页面大小(64 字节)。然后就可以用这个数字访问页表了。

我知道其中很大一部分取决于系统,但我只是想掌握对其的一般理解。 谢谢!

c++ operating-system heap-memory cpu virtual-memory
1个回答
0
投票

我找到了这篇文章。它很好地解释了幕后发生的事情。它是用 C 语言编写的,有点旧,但它可以帮助您大致了解它是如何工作的。

© www.soinside.com 2019 - 2024. All rights reserved.