On Sat, Nov 24, 2007 at 02:34:41PM +0100, Pierre Ossman wrote: > On Fri, 23 Nov 2007 00:15:53 +0000 (GMT) > Daniel Drake <[email protected]> wrote: > > > Being spoilt by the luxuries of i386/x86_64 I've never really had a good > > grasp on unaligned memory access problems on other architectures and decided > > it was time to figure it out. As a result I've written this documentation > > which I plan to submit for inclusion as > > Documentation/unaligned_memory_access.txt > > > > Before I do so, any comments on the following? > > > > A very nice, and much needed document. I think you should include one thing though: > > memcpy() is _only_ safe when one of the pointers is char* or void*. If it is anything more complex than that, gcc will assume alignment and optimise based on that. E.g. memcpy() of two long:s generates the same assembly as doing an assignment. Dumb memcpy (while (len--) { *d++ = *s++ }) will have alignment problems in any case. Intelligent ones, like the one provided in glibc, first copy bytes till output is aligned (C file) *or* size is a multiple (i686 asm file) of word size, and then it copies word-by-word. Linux's x86_64 memcpy does the opposite, copies 64bit words, and then copies the last bytes. So, in effect, as long as no packed structures are used, memcpy should be safer on *int, etc., than *char, as the compiler ensures word-alignment. -- lfr 0/0
Attachment:
pgpFZPnjpK8Im.pgp
Description: PGP signature
- Follow-Ups:
- Re: [RFC] Documentation about unaligned memory access
- From: Pierre Ossman <[email protected]>
- Re: [RFC] Documentation about unaligned memory access
- References:
- [RFC] Documentation about unaligned memory access
- From: Daniel Drake <[email protected]>
- Re: [RFC] Documentation about unaligned memory access
- From: Pierre Ossman <[email protected]>
- [RFC] Documentation about unaligned memory access
- Prev by Date: Re: [PATCH] sdio_uart: fix sign of paramter status in sdio_uart_receive_chars()
- Next by Date: Re: [PATCHv5 4/5] Allow setting O_NONBLOCK flag for new sockets
- Previous by thread: Re: [RFC] Documentation about unaligned memory access
- Next by thread: Re: [RFC] Documentation about unaligned memory access
- Index(es):