Re: Alignment of variables in structs
- From: Eric Sosman <Eric.Sosman@xxxxxxx>
- Date: Thu, 29 Nov 2007 13:58:48 -0500
Rick wrote On 11/29/07 13:41,:
Given:
struct x
{
int i;
char c;
}st_x;
int size_of_struct = sizeof( struct x );
int size_of_st_x = sizeof( st_x );
struct x st_array[ 5 ];
int size_of_st_array = sizeof( st_array );
If an int is 32 bits and a char is 8 bits, are there any guarantees as
to what size_of_struct, size_of_st_x, or size_of_st_array evaluate to?
(they could be 5, 5, and 25, or 8, 8, and 40.)
sizeof(struct x) == sizeof st_x, always.
sizeof st_array == 5 * sizeof(struct x), always.
sizeof(struct x) >= sizeof(int) + sizeof(char), always.
Are there any rules that specify whether compilers are required to
align variables on any specific boundaries?
The implementation is allowed but not required to have
alignment restrictions. The only "requirement" is the
vacuous one that a `char' has no alignment requirement (it
can reside at any address that is a multiple of 1).
I tried all of this on gcc on cygwin on Windows XP and got
size_of_struct = 8, size_of_st_x = 8, and size_of_st_array = 40,
rather than what one might expect at first glance, size_of_struct = 5,
size_of_st_x = 5, and size_of_st_array = 25. Am I guaranteed to get
that on all platforms?
No, although it's a common outcome. Presumably, the
compiler is trying to align each `int' to a four-byte
boundary. To make sure that both st_array[0].i and
st_array[1].i are properly aligned, the compiler must
ensure that sizeof(struct x) is a multiple of four, which
it does by inserting three unused "padding" bytes.
If there are any such guarantees, do any of you have a reference to a
document that says so?
There are no such guarantees -- which probably means
the Internet has *lots* of documents saying there are ;-)
--
Eric.Sosman@xxxxxxx
.
- References:
- Alignment of variables in structs
- From: Rick
- Alignment of variables in structs
- Prev by Date: Re: struct pointer
- Next by Date: Re: look up tables
- Previous by thread: Alignment of variables in structs
- Next by thread: Re: Alignment of variables in structs
- Index(es):
Relevant Pages
|