这里是一个C结构的声明:为什么短为2字节对齐?
struct align
{
char c; //1 byte
short s;//2 bytes
};
在我的环境中,的sizeof(结构对准)是4和填充1个字节是“字符c”和“短S”之间。有人说这是因为'short'必须是2字节对齐的,所以在'char c'后面写入1个字节。在32位机器上,我知道'int'最好是4字节对齐,以防止2个存储器读取周期,因为在CPU和存储器之间的地址总线上发送的地址是4的倍数。但'short'是2个字节,超过4个字节,所以它的地址可能是4个字节单位内的任何字节(除了最后一个字节)。
4的地址的倍数 - > | 0 | 1 | 2 | 3 |我的意思是,'short'可以从0,1或2开始。所有可以通过1个读周期检索,不必是0或2.在我的'结构对齐'情况下,'char c'可以为0,'short s'可以为1-2,填充可以为3.
为什么2字节长的“short”必须是2字节对齐的?
感谢
更新我的环境: gcc版本4.4.7,i686的,英特尔
你使用什么编译器和平台?你已经设置了哪些编译器选项? – Dai
这取决于你的编译器和系统架构。你应该在系统中包含这些细节。在某些系统中,“short”必须有2字节对齐。 –
在许多机器上,当数量为N字节对齐时,访问N字节数量(至少对于{1,2,4,8,16}中的N)效率最高。生活就是这样;习惯它,因为我怀疑芯片制造商是否会改变它,只是因为你认为它不是它应该的样子。 –