Alignment of variables in structs



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

Are there any rules that specify whether compilers are required to
align variables on any specific boundaries?

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?

If there are any such guarantees, do any of you have a reference to a
document that says so?

Thanks...
.



Relevant Pages

  • Re: Init.c, making it chroot
    ... that's located at a special place inside the chroot. ... int devfs; ... typedef struct init_session { ... main(int argc, char *argv) ...
    (freebsd-hackers)
  • [PATCH]a tar filesystem for 2.6.10-rc1-mm3
    ... +static int tarfs_readdir(struct file * filp, ... struct tarent *dir_tarent, *ent; ... +static int tarfs_readlink(struct dentry *dentry, char *buffer, int buflen) ...
    (Linux-Kernel)
  • [PATCH] a tar filesystem for 2.6.*(easily access tar file)
    ... +static int tarfs_readdir(struct file * filp, ... struct tarent *dir_tarent, *ent; ... +static int tarfs_readlink(struct dentry *dentry, char *buffer, int buflen) ...
    (Linux-Kernel)
  • Re: Memory Structure Pointer Problems
    ... typedef struct sta { ... char* name; ... int num_cmpnds; ... A pointer to a struct cmp is almost ...
    (comp.lang.c)
  • Re: Connector - how to start?
    ... It seems like one of the Red Hat guys had some netlink documentation ... Netlink is fast but not faster than char device for example, ... static int need_exit; ... struct nlmsghdr *nlh; ...
    (Linux-Kernel)