On Thu, Nov 23, 2006 at 05:14:44PM +0100, Ren? Scharfe wrote: > Erik Mouw schrieb: > > On Thu, Nov 23, 2006 at 04:45:09PM +0100, Ren? Scharfe wrote: > >> Is there really a compiler that inserts padding between arrays of > >> unsigned chars? > > > > Yes, that compiler is called "gcc". > > > > #include <stdio.h> > > > > struct foo { > > unsigned char a[3]; > > unsigned char b[3]; > > }; > > > > int main(void) > > { > > printf("%d\n", sizeof(struct foo)); > > return 0; > > } > > > > On i386 that prints 6, on ARM it prints 8. > > Does it add 1 byte after a and and 1 after b or two after b? > I suspect it's the latter case -- otherwise Gerrit's patch, > which started this thread, wouldn't help solve his problem. > Or the pad sizing follows complicated rules that I do not > understand at the moment. You're right, it adds the padding after b: #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) printf("%d %d\n", offsetof(struct foo, a), offsetof(struct foo, b)); prints "0 3" on ARM. > Time to look for an ARM emulator, it seems. objdump -D -S is your friend. I didn't have an ARM target ready, but at least I know enough ARM assembly that I can see what it will print :) Erik -- +-- Erik Mouw -- www.harddisk-recovery.com -- +31 70 370 12 90 -- | Lab address: Delftechpark 26, 2628 XH, Delft, The Netherlands - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html