屬性打包

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 屬性限制編譯器為保持記憶體對齊而執行的結構填充