memory - 使用分段 : how? 的 64 TB 虚拟内存,用于 32 位 x86

标签 memory x86 virtual intel memory-segmentation

Intel x86 内存模型具有分段和分页功能。系统可以寻址多达 64 TB 的虚拟内存,这意味着什么?我的理解是只有 4GB 的虚拟内存是可寻址的。这里的差距是什么?这都是在 32 位处理器的上下文中

这是数学:

2^13(段选择器)* 2(LDT 或 GDT)* 2^32 = 2^46 = 64 TB。这在文献中称为总虚拟内存。他们是否错误地将其称为虚拟内存?让我困惑的是,处理器本身只有 32 位地址线。

或者,他们是否试图说这是可以分配的总虚拟内存(跨所有进程?)

最佳答案

1) 段描述符是由段选择器从 2^13*2=2^14 中选择的,该选择器位于单独的寄存器中,因此它绕过了 32 个地址线的限制。

2)段描述符包含一个段的32位地址,是一个32位的值。向其添加 32 位偏移量是 简单算术加法 ,所以你最终得到一个 32 位地址。仅 2^32=4GB。

问题是,这些段可能会重叠。您的数学错误在于当前段描述符的索引(14 位)和偏移量(32 位)没有连接。它们被处理形成一个 32 位的线性地址。

退房 this page有关 x86 内存分段的更多信息。

关于memory - 使用分段 : how? 的 64 TB 虚拟内存,用于 32 位 x86,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5444984/

相关文章:

c++ - 如何确定 C++ 中标准库字符串或其他非基本数据类型的内存大小?

执行存储在数据段中的 x86 指令的性能损失?

c++ - 虚拟基类数据成员

.net - 虚拟麦克风、网络和 vb.net

c - 算法中处理小数字时出现意外段错误

performance - 如何限制 RAM 以测试低内存情况?

c++ - 忙等待现代处理器的优缺点

c++ - 存在多态性编译问题的简单文件

android - 可绘制对象的内存,资源在 APK 内部、APK 外部更好还是内存相同?

c - 如何在我的计算机上启用对 POPCNT 指令/内部指令的支持?