编织者一般倾向于用单一字包装借方,从而减少其结构的整体规模。 这种包装损害了对借方成员的较慢准入。 例如:
struct Bitfields
{
unsigned int eight_bit : 8;
unsigned int sixteen_bit : 16;
unsigned int eight_bit_2 : 8;
};
包装
0 8 24
-----------------------------------------------------
| eight_bit | sixteen_bit | eight_bit_2 |
-----------------------------------------------------
每次访问<条码>,有十六条轨道条码>,有变动和双向及操作。
另一方面,如果是,
struct NonBitfields
{
uint8_t eight_bit;
uint16_t sixteen_bit;
uint8_t eight_bit_2;
};
因此,汇编者一般按字面对成员进行调和,并作如下表述:
0 8 16 24
-----------------------------------------------------
| eight_bit | | sixteen_bit |
-----------------------------------------------------
| eight_bit_2| |
-----------------------------------------------------
这些废物的面积比环绕区长得多,但成员可以更快地进入,而不必进行轨道转移和掩饰。
这里还有其他一些差异:
- You can t apply
sizeof
to a bitfield member.
- You can t pass a bitfield member by reference.
在可携带性方面,这两种备选办法都应致力于任何符合标准的汇编者。 如果你说,不同平台在撰写文件或书状时,具有双双向可移动性,那么,这两种情况都会发生。
就优惠而言,我将选择使用<代码>uint16_t<>/code>,而不是借方,除非有很好的理由将田地集中起来,以挽救空间。 如果我有许多“<条码>bool条码>,则我通常使用借方,以同样的措辞压缩这些蓝 flag旗。