属性打包

packed 是一个变量属性,与结构和联合使用,以最小化内存需求。

#include <stdio.h>
struct foo {
    int a;
    char c;
};

struct __attribute__((__packed__))foo_packed {
    int a;
    char c;
};

int main()
{
    printf("Size of foo: %d\n", sizeof(struct foo));
    printf("Size of packed foo: %d\n", sizeof(struct foo_packed));
    return 0;
}

在我的 64 位 Linux 上,

  • struct foo 的大小= 8 个字节
  • struct foo_packed 的大小= 5 个字节

packed 属性限制编译器为保持内存对齐而执行的结构填充