gpt4 book ai didi

c - 为什么编译器在 N 字节边界上对齐 N 字节数据类型?

转载 作者:太空狗 更新时间:2023-10-29 16:12:17 30 4
gpt4 key购买 nike

我不明白为什么编译器在 4 字节边界上对齐 int,在 2 字节边界上对齐 short,在 1 字节边界上对齐 char。据我所知,如果处理器的数据总线宽度为 4 字节,则从不是 4 的倍数的地址读取 int 需要 2 个内存读取周期。
那么,为什么编译器不将所有数据对齐到 4 字节边界上呢?例如:

struct s {
char c;
short s;
};

在这里,1) 为什么编译器在 2 字节边界上短对齐?假设处理器可以在单个内存读取周期中获取 4 个字节,那么即使在 char 和 short 之间没有填充,在上述情况下读取 short 是否也只需要 1 个内存读取周期?

2) 为什么编译器不在 4 字节边界上短对齐?

最佳答案

这些对象必须适合数组。数组是连续的。因此,如果第一个元素是 N 字节对齐的,并且所有对象都是 N 字节大的,那么数组中的所有对象也必然是 N 字节对齐的。

因此,如果 short 有 2 个字节大,但 4 个字节对齐,则数组中所有 short 之间将有 2 个字节的空洞,这是被禁止的。

您确实看到您的假设存在轻微缺陷。我可以制作一个包含 26 个字符的 struct,它不会按 26 字节对齐。它可以从任何地方开始。对齐等于 N 或除以 N 的 N 字节类型。

关于c - 为什么编译器在 N 字节边界上对齐 N 字节数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25806321/

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