|
Message-ID: <6b44b4a2-0047-6304-8c86-058236dc1c74@gmch.uk> Date: Sun, 7 Jul 2019 19:17:48 +0100 From: Chris Hall <musl@...h.uk> To: musl@...ts.openwall.com Subject: malloc() alignment and max_align_t The C11 Standard says that malloc() will return a pointer which "is suitably aligned so that it may be assigned to a pointer to any type of object with a fundamental alignment requirement", and it says that _Alignof(max_align_t) is equal to the "fundamental alignment". I note that: * musl malloc() works to an alignment SIZE_ALIGN, which is #defined'd to 4*sizeof(size_t) == 32 for 64-bit processors. * musl defines max_align_t: typedef struct { long long __ll; long double __ld; } max_align_t; (same like other libc, FWIW). _Alignof(max_align_t) == 16 for x86_64 (at least), because that's the ABI alignment for long double. Clearly, C11 does not require malloc() to align exactly as max_align_t, and bigger is fine. But I'm curious as to why SIZE_ALIGN is twice as big as it needs to be ? Thanks, Chris
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.