typedef typeof(sizeof(char)) Size_t; #define bufsize ((1L << (8 * sizeof(Size_t) - 2))-256) struct huge_struct { short buf[bufsize]; int a; int b; int c; int d; }; union huge_union { int a; char buf[bufsize]; }; unsigned long union_size() { return sizeof(union huge_union); } unsigned long struct_size() { return sizeof(struct huge_struct); } unsigned long struct_a_offset() { return (unsigned long)(&((struct huge_struct *) 0)->a); } int main() { /* Check the exact sizeof value. bufsize is aligned on 256b. */ if (union_size() != sizeof(char) * bufsize) abort(); if (struct_size() != sizeof(short) * bufsize + 4*sizeof(int)) abort(); if (struct_a_offset() < sizeof(short) * bufsize) abort(); return 0; }