gpt4 book ai didi

x86 - IA-32 x86 数据对齐

转载 作者:行者123 更新时间:2023-12-01 12:36:36 27 4
gpt4 key购买 nike

我能找到的所有东西都告诉我我应该对齐,因为它可以更有效率,但我找不到我应该在 IA-32 上这样做的硬件问题。这是因为地址总线需要被 4 整除的地址吗?或者因为 RAM 只能提供对齐的数据而不会损失性能?或者?

http://www-inst.eecs.berkeley.edu/~cs164/sp05/ia32-refs/ia32-chapter-two.pdf

On the ia32, there is no requirement for data alignment. A program will work correctly with four-byte integers regardless of where they are located. For example, a four byte integer could be located at addresses 1,2,3,4. However, the machine executes much more efficiently if, for example, four byte integers are on a four byte boundary, so a better choice of starting address for a four byte integer is an address that is a multiple of 4.

最佳答案

这是一个与硬件相关的问题。通常RAM模块连接如下:

enter image description here

如果发生对齐访问,则同时选择模块 1、2、3 和 4,因此可以在一个内存读取周期内读取 32 位。

如果发生未对齐的访问,比如说少了 2 个字节,那么模块 1、2、3 和 4 在第一个读取周期被选中,其中只有高 2 个字节(我们正在获取的数据的低 2 个字节)阅读(模块 3 和 4);在下一个读取周期中,模块 5、6、7 和 8 被选中,其中仅读取低 2 字节(我们正在获取的数据的高 2 字节)。

RAM 模块的更详细 View (针对容量为 4 个字的 4 位机器进行了简化)。

4-bit RAM

在此图中,很明显您只能选择一排触发器,因为解码器只会激活其输出线之一,其他 3 条将保持为 0。

请注意,如果访问未对齐的地址(即 MIPS),某些架构会通过抛出总线错误来强制您对齐所有内存访问,而其他架构将执行尽可能多的读取周期以获取所需的数据(即 x86),尽管当然这需要额外的硬件(通常是 MMU )。

关于x86 - IA-32 x86 数据对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29097555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com