> 
> 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



_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to