
On Thu, Aug 02, 2012 at 12:44:40AM -0400, Daniel Larimer wrote:
On Aug 2, 2012, at 12:34 AM, Andrey Semashev <andrey.semashev@gmail.com> wrote:
On Thursday 02 August 2012 06:03:22 Lars Viklund wrote:
Isn't there a standard section that mentions that some flavor of sequence-of-char storage must have alignment suitable for any natural alignment on the platform?
Might just be constrained to free store allocations or something, I guess.
Yes, this is a requirement for pointers returned by malloc and ::operator new. Structure's alignment is the largest alignment of its members. Array's alignment is the alignment of the array element.
this requirement does not hold for stack allocated objects. Looks like I would have to modify it to use the aligned storage, although the code appears to work with mis-aligned double (pointing at an 'odd' address).
Try "any type wider than an octet on pretty much any platform not x86". You're paying a massive cost on x86 for misaligned accesses too. Floating point numbers and SSE extensions will blow up even harder on misaligned accesses.
I am sure that some types will require proper alignment. Options include always allocating arrays in chunks of 8 bytes by switching to an int64 array and eating the 'overhead'. Anything require alignment greater than 8 bytes?
-- Lars Viklund | zao@acc.umu.se