Jey*_*ram 13 c structure padding
据我所知,默认情况下将完成4字节对齐.说
typedef struct
{
int data7;
unsigned char data8;
//3 -bytes will be added here.
}Sample1;
Run Code Online (Sandbox Code Playgroud)
所以sizeof(Sample1)将是8.
但是对于以下结构,为什么没有发生填充?
typedef struct
{
unsigned char data1;
unsigned char data2;
unsigned char data3;
unsigned char data4;
unsigned char data5;
unsigned char data6;
}Sample2;
Run Code Online (Sandbox Code Playgroud)
但sizeof(Sample2)仅为6.Sample2不是4字节对齐的结构?
编辑::
按照Wiki
数据对齐意味着将数据放入存储器偏移量等于字大小的某个倍数,这会因CPU处理内存的方式而提高系统性能.
但Sample2的成员不会以两个的倍数对齐?
谢谢.
Mys*_*ial 23
第二个结构中的所有字段都不需要4字节对齐.unsigned char只需要1字节对齐.因此,不需要将其实际对齐到4个字节.
结构通常仅与所有字段的最大对齐对齐.
不,在典型的实现Sample2中不是 4-bute 对齐的结构。它是一个 1 字节对齐的结构。
在典型的实现中,整个结构的对齐要求被计算为其单个成员的对齐要求的最大值。这就是为什么您的Sample1对齐要求为int(在您的平台上为4),而您的Sample2对齐要求为unsigned char,即 1。
| 归档时间: |
|
| 查看次数: |
2955 次 |
| 最近记录: |