gpt4 book ai didi

CPU 和数据对齐

转载 作者:太空狗 更新时间:2023-10-29 16:35:09 25 4
gpt4 key购买 nike

如果您觉得这个问题已被多次回答,请原谅我,但我需要以下问题的答案!

  1. 为什么数据必须对齐(在 2 字节/4 字节/8 字节边界上)?在这里我怀疑当 CPU 有地址线 Ax Ax-1 Ax-2 ... A2 A1 A0 那么很有可能按顺序寻址内存位置。那么为什么需要在特定边界对齐数据?

  2. 如何在编译代码和生成可执行文件时找到对齐要求?

  3. 例如,如果数据对齐是 4 字节边界,这是否意味着每个连续字节都位于模 4 偏移量处?我的疑问是,如果数据是 4 字节对齐的,这是否意味着如果一个字节位于 1004,那么下一个字节位于 1008(或 1005)?

最佳答案

CPU 是面向字的,而不是面向字节的。在一个简单的 CPU 中,内存通常配置为每个地址选通返回一个(32 位、64 位等),其中底部的两个(或更多)地址线通常是无关位。

英特尔 CPU 可以对许多指令执行非字边界访问,但是会降低性能,因为 CPU 在内部执行两次内存访问和一次数学运算以加载一个字。如果您正在进行字节读取,则不适用对齐。

某些 CPU(ARM 或 Intel SSE 指令)需要对齐内存,并且在进行未对齐访问(或抛出异常)时具有未定义的操作。它们通过不实现更复杂的加载/存储子系统来节省大量的硅空间。

对齐方式取决于 CPU 字长(16、32、64 位)或在 SSE 的情况下取决于 SSE 寄存器大小(128 位)。

关于你的最后一个问题,如果你一次加载一个数据字节,那么大多数 CPU 没有对齐限制(一些 DSP 没有字节级指令,但你可能不会遇到)。

关于CPU 和数据对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3025125/

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