为什么在这种情况下不会发生填充?
据我所知,默认情况下将完成4字节对齐。 说
typedef struct { int data7; unsigned char data8; //3 -bytes will be added here. }Sample1;
sizeof(Sample1)
将为8。
但对于以下结构,为什么没有发生填充?
typedef struct { unsigned char data1; unsigned char data2; unsigned char data3; unsigned char data4; unsigned char data5; unsigned char data6; }Sample2;
但sizeof(Sample2)仅为6。 Sample2不是4字节对齐的结构?
编辑::
按照Wiki
数据对齐意味着将数据放入存储器偏移量等于字大小的某个倍数,这会因CPU处理内存的方式而提高系统性能。
但Sample2的成员不会以两个的倍数对齐?
谢谢。
第二个结构中的所有字段都不需要4字节对齐。 unsigned char
只需要1字节对齐。 因此,不需要将其实际对齐到4个字节。
结构通常仅与所有字段的最大对齐对齐。
data7
是一个4字节的项,因此编译器通常会尝试将其与4的倍数对齐。
data1
是一个单字节项,因此编译器不会尝试将其与任何特定边界对齐(即,这样做不会有实际收益)。
不,在典型的实现中, Sample2
不是4-bute对齐结构。 它是一个1字节对齐的结构。
在典型的实现中,整个结构的对齐要求被计算为其各个成员的对齐要求的最大值 。 这就是为什么Sample1
对齐要求为int
(平台上为4),而Sample2
对齐要求为unsigned char
,即1。
Char需要1个字节对齐。 最大数据类型有char,它是一个字节对齐,因此你得到的大小为’6’。
您可以查看此站点以获得更多信息。 http://www.geeksforgeeks.org/archives/9705 。 他们已详细解释了这一点。