我不明白为什么编译器会将int对齐到4字节边界,short对齐到2字节边界,char对齐到1字节边界。
我知道如果处理器的数据总线宽度为4字节,则从非4字节倍数地址读取int需要2个内存读取周期。
那么,为什么编译器不将所有数据都对齐到4字节边界呢?
例如:
struct s {
char c;
short s;
};
这里,为什么编译器将short类型对齐到2字节边界?假设处理器可以在单个内存读取周期内获取4个字节,即使char和short之间没有任何填充,上述情况中读取short也只需要1个内存读取周期吗?
为什么编译器不将short类型对齐到4字节边界?
struct s { char c; int i};
那么大小将变为8字节,因为您需要完整的4个字节才能在读取周期中获取整数。 - Nikhil Vidhani