On 8/2/05, Paul Koning <[EMAIL PROTECTED]> wrote:
> It sounds like the workaround is to avoid memcpy, and just use
> variable assignment.  Alternatively, cast the pointers to char*, which
> should force memcpy to do the right thing.  Ugh.

Casting to void* does not work either. gcc keeps the alignment
information -- but not the *unalignment* information, if that
distinction makes any sense -- of a particular variable around as long
as it can, through casts and even through assignment. The unalignment
information, on the other hand, is lost immediately after the &
operator. None of these examples produce an unaligned load:

        memcpy(&s->b, &n, sizeof n);

        memcpy((void*)&s->b, &n, sizeof n);

        void *p = &s->b;
        memcpy(p, &n, sizeof n);

But as pointed out by others, this does produce an unaligned load:

        s->b = n;

Cheers,
Shaun

Reply via email to