sizeof packed bitfield返回4但我希望1.它是如何来的以及如何修复?

时间:2015-07-27 14:33:50

标签: c++

我有一个定义如下的位域(我希望它的大小: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。

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

1 个答案:

答案 0 :(得分:4)

这取决于基础类型。将unsigned更改为unsigned char

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