sizeof打包位域返回4,但我期望是1.它是怎么来的,我怎么能解决

sizeof packed bitfield returns 4 but I expect 1. How does it come and how I can fix?

本文关键字:解决 怎么能 期望 包位域 位域 返回 sizeof      更新时间:2023-10-16

我有一个位域定义如下(我希望它的大小为:1):

#pragma pack(push, 1)
typedef struct
{
    unsigned boolFoo  : 1;
    unsigned pLACEHOLDER : 7;
} KnownBitFlags1_t;
#pragma pack(pop)

但是经过痛苦的调试,我终于弄清楚了sizeof(KnownBitFlags1)返回4为什么?

我也试过:

typedef struct
{
    unsigned boolFoo  : 1;
    unsigned pLACEHOLDER : 7;
} __attribute__((packed, aligned(1))) KnownBitFlags1_t;

是什么让结构体的大小保持在4

那么我怎么做才能停止填充这种结构的数组呢?

这取决于底层类型。Change unsigned to unsigned char:

typedef struct {
    unsigned char boolFoo  : 1;
    unsigned char pLACEHOLDER : 7;
} KnownBitFlags1_t;