Thread (10 messages) flat view 10 messages, 4 authors, 2016-08-11

Re: sizeof(struct ...)

From: Erik Mouw <hidden>
Date: 2016-08-11 20:23:25

On Thu, Nov 23, 2006 at 05:14:44PM +0100, Ren? Scharfe wrote:
Erik Mouw schrieb:
quoted
On Thu, Nov 23, 2006 at 04:45:09PM +0100, Ren? Scharfe wrote:
quoted
 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 --
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help