From: Roland Dreier <[EMAIL PROTECTED]>
Date: Wed, 09 Aug 2006 11:37:31 -0700

> Agreed (although not really RISC -- sparc64 and ia64 have this
> problem, while ppc is fine with unaligned access).  However
> __attribute__((packed,aligned)) has just been brought to my attention.
> For example, on sparc64,
> 
>       struct foo { char x; int a; } __attribute__((packed,aligned));
>       struct bar { char x; int b; } __attribute__((packed));
>       
>       int c(struct foo *x) { return x->a; }
>       int d(struct bar *x) { return x->b; }
> 
> compiles to:
 ...
> which suggests that adding "aligned" is a good idea for many of the
> uses of "packed".  However I don't know how all gcc version do with
> this.  Anyone have any comments on "__attribute__((packed,aligned))"?

Good find.

It might usable in some of the questionable cases, however it changes
the size of the struct which eliminates most of the gains.

For example:

[EMAIL PROTECTED]:~/src/GIT/net-2.6$ cat foo.c
#include <stdio.h>

struct foo_packed {
        char x; int a;
} __attribute__((packed));

struct foo_packed_aligned {
        char x; int a;
} __attribute__((packed,aligned));

int main(void)
{
        printf("foo_packed: sizeof(%Zd)\n",
               sizeof(struct foo_packed));
        printf("foo_packed_aligned: sizeof(%Zd)\n",
               sizeof(struct foo_packed_aligned));

        return 0;
}
[EMAIL PROTECTED]:~/src/GIT/net-2.6$ gcc -O -o foo foo.c
[EMAIL PROTECTED]:~/src/GIT/net-2.6$ ./foo
foo_packed: sizeof(5)
foo_packed_aligned: sizeof(8)
[EMAIL PROTECTED]:~/src/GIT/net-2.6$ 

This doesn't work for things like packet headers, for example.

Oh well.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to