数据结构

结构体

字节对齐

使用__attribute__属性指定结构体对齐方式。

typedef struct
{
    char d1;
    int d2;
    unsigned short d3;
    char d4;
} Foo;

sizeof(Foo)为12。

typedef struct
{
    char d1;
    int d2;
    unsigned short d3;
    char d4;
} __attribute__((packed)) Bar;

使用packed指示编译器取消字节对齐,sizeof(Bar)为8。

对齐规则

  • 从结构体首地址开始依次将元素放入内存,元素会被放置在其自身对齐大小的整除倍数地址上。char类型可以在任何地方开始,short类型开始地址必须被2整除,4位的int或者float类型开始地址必须被4整除,8位的long类型开始地址必须被8整除。
  • 如果结构体大小不是所有元素中最大对齐大小的整数倍,则结构体对齐到最大元素对齐大小的整数倍,填充空间放置到结构体末尾。
  • 结构体数据类型的对齐大小为其自身元素中最大对齐大小元素的对齐大小。

参考

results matching ""

    No results matching ""