假设我们正在使用具有40个物理地址位的系统。物理地址总空间(假定字节可寻址内存)为字节,即1 TiB。而且,如果虚拟地址的长度为48位,则意味着虚拟内存可用的地址比物理内存中的地址要多。
这对我来说很有意义,因为“多余”地址也可能指向硬盘位置。但是,我不了解虚拟地址和物理地址之间的转换是如何发生的。我假设有一个映射存储在某处,该映射将VAS位置链接到物理位置。如果虚拟地址位置多于物理地址,那么如何将所有这些映射存储在内存中?至少需要48位来存储每个虚拟地址,然后再需要40位来存储其映射到的物理位置。因此,显然,您不能仅存储每个虚拟地址与其物理对应物的1:1映射,因为映射每个位置将比物理内存本身占用更多的内存。
我在这里到底想念什么?
即使只有少量的内存和地址空间,您也无法做到这一点。如果您拥有16位物理地址和16位虚拟地址,您仍然将无法存储所有1:1映射!
—
user253751 '17
这个问题甚至比您想的还要复杂。计算机很少具有TB的内存,因此物理内存比虚拟地址空间少。更糟糕的是:每个进程都具有完全独立的虚拟地址空间!
—
Mooing Duck's
除了硬盘位置之外,您还只有一点点/空间可浪费。例如,您可以在堆栈下方设置一个较大的区域,以防止未检测到的溢出。您可以在防止另一类攻击的地方随机加载。如果地址属于内核或用户,想用一点来表示-即使浪费了一半的空间,也请继续。尽管大多数教科书都专注于调出虚拟内存方面,但还有很多其他内容。
—
Maciej Piechotka '12
(还请注意,地址可能会别名,这有时很有用,因此,即使A!= B,VA A和地址B仍指相同的
—
PAP