On 8/5/05, Amit Dang <[EMAIL PROTECTED]> wrote:
> Hi Vadiraj,
> The statement " Take it for granted you get either 4 byte or 8 byte boundary
> but never 1 byte." you made is it generic or just valid for the structure in
> question? If its generic then I have a question.
> Why the size of
> struct {
>    char i;
>    char j;
>    char k;
> } is 3 ? (gcc 2.96 on Linux 32-bit machine).

Because the alignment requirement for this structure is 1, it is
byte-aligned.  A structure is padded and properly aligned only if one
of its members requires more than a single byte of storage. Take a
look at this:

        struct a {
                char  a;
                int    :0;
                char  b;
        };

its size is 3, since it's byte-aligned also.  This rule does not hold
for the structure

        struct b {
                char  a;
                short s;
        }

since one member, here s, requires more than one byte of storage and
must be aligned to a 4 byte boundary (4 is the smallest possible
multiple of 2 larger than 3) resulting in sizeof(b) == 4.

> What I have understood atleast for gcc compiler Linux 32-bit machine is
> that, Maximum byte boundary is 4.

True for int, but double and long long will always be 8 byte aligned by default.

> equal to minimum of (4 or field with maximum size (within the structure)).
> i.e. for the above example maximum field size if 1 and min (4, 1) = 1, so
> structure is aligned to 1 byte.
> If I have following structure
> struct {
>    short i;
>    char j;
> } its size will be 4.

True.
 
> if i modify the above struct to
> struct {
>    int i;
>    char j;
> } its size will be 8.

Yes, exactly.

> Now modifying int to long long in the above structure will have a size of
> 12 not 16 because byte alignment min (4, 8) = 4.

No, it will have a size of 16 because the alignment requirement for
this structure is a multiple of its largest member.  long long and
double is always double word aligned.

Regards

        \Steve
-
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" 
in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to