如何实现结构填充与压缩?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

考虑:

struct mystruct_A
{
   char a;
   int b;
   char c;
} x;

struct mystruct_B
{
   int b;
   char a;
} y;

结构尺寸分别为12和8。

这些结构是填充的还是压缩?

提问于
用户回答回答于

例如:

struct mystruct_A {
    char a;
    char gap_0[3]; /* inserted by compiler: for alignment of b */
    int b;
    char c;
    char gap_1[3]; /* -"-: for alignment of the whole struct in an array */
} x;

另一方面,避免编译器执行填充(这必须是明确请求的),在gcc下,它的__attribute__((__packed__)),如下:

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

用户回答回答于

一些编译器提供#pragma以抑制填充或使其打包为n个字节数。如下:

#pragma pack(n)

扫码关注云+社区