作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在实模式分段内存模型中,段总是从段落边界开始。一个段落的大小是 16 字节,所以段地址总是可以被 16 整除。在段落边界上有段的原因/好处是什么?
最佳答案
与其说是公理,不如说是好处——8086 的实模式分段模型是在硬件级别设计的,因此段寄存器指定了段落边界。
段寄存器指定了 8086 的 20 位地址空间的高 16 位的基地址,该基地址的低 4 位本质上被强制为零。
分段架构是让 8086 的 16 位寄存器架构能够寻址一整兆字节(!)地址空间(需要 20 位寻址)的一种方式。
对于更多的历史,英特尔在 x86 架构中采取的下一步是从直接定义基地址中抽象段寄存器。那是 286 保护模式,其中段寄存器保存一个“选择器”,而不是定义物理基地址的位,而是一组描述符表的索引,这些表保存有关物理地址的信息,访问物理地址的权限内存和其他东西。
现代 32 位或更大的 x86 处理器中的段寄存器仍然这样做。但是由于地址偏移量能够指定完整的 32 位寻址(或 x64 处理器上的 64 位)和能够在由选择器定义的段内提供虚拟内存语义的页表,编程模型基本上消除了必须在应用程序级别操作段寄存器。在大多数情况下,操作系统设置段寄存器一次,没有其他需要处理它们。所以程序员通常甚至不需要知道它们已经存在了。
关于memory-management - 为什么段从段落边界开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2348304/
我是一名优秀的程序员,十分优秀!