RE: Bit field definition ?

[ Available lists | Index of freebsd-hackers | Month of Oct 2004 | Week of 10 Oct 2004 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Li, Qing <qing.li@bluecoat.com>
Date
10 Oct 2004 23:48:29
Subject
RE: Bit field definition ?
Message-ID
00CDF9AA240E204FA6E923BD35BC643606BF695A@bcs-mail.internal.cacheflow.com

Replies
Referenced by

[ Hide this part ]
 
>
> In the last episode (Oct 08), Li, Qing said:
> > The bit fields "th_x2" and "th_off" in "struct tcphdr",
> > even though defined as "u_int", actually occupies 1 byte.
>
> u_int th_x2:4, /* (unused) */
> th_off:4; /* data offset */
>
> The :4 after each variable means 4 bits long, so both fields
> together take up 8 bits = 1 byte. That's the whole purpose
> of bitfields :)
>

D'oh

I didn't ask the right question.

It seems u_int specifies the packing and alignment size
for the bit fields, is that correct ?

struct {
u_int a:4,
b:4;
}; is 4 bytes in size.

struct {
u_int a:4,
b:4;
short c;
}; is 4 bytes in size.

struct {
u_int a:4,
b:4;
short c;
u_char d;
}; is 8 bytes in size;

But

struct {
u_int a:4,
b:4;
u_char d;
short c;
}; is 4 bytes in size;


-- Qing




Elapsed time: 0.231 seconds