git: libc - Fix malloc() alignment for small allocations
Matthew Dillon
dillon at crater.dragonflybsd.org
Sat Sep 3 10:31:50 PDT 2016
commit 3f81f4537238b9318fd18979ca2d5be521caea13
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sat Sep 3 10:24:56 2016 -0700
libc - Fix malloc() alignment for small allocations
* malloc()'s slab allocator was set to use 8-byte alignment
for any allocation < 128 bytes that was not otherwise on
an integral alignment boundary. This breaks GCC-7 which assumes
16-byte alignment for non-16-integral sizes < 128 bytes. e.g.
if 18 bytes is allocated, GCC-7 assumes the resulting pointer will
be 16-byte-aligned.
* The standard is somewhat deficient in its characterization of what the
required alignment should be, because there are already instructions
which prefer 32 and 64 byte alignments, but are relaxed on Intel to
only require 16-byte alignments (aka %ymm and %zmm registers in the
vector extensions), and its stupid to enforce even larger alignments
for tiny allocations.
* But generally speaking it makes sense to enforce a 16-byte alignment
for any allocations >= 16 bytes, regardless of the size being passed-in
not being 16-byte aligned, and this change does that. Allocations of
less than 16 bytes will still be 8-byte aligned because it is phenominally
wasteful for them not to be.
Reported-by: marino
Summary of changes:
lib/libc/stdlib/nmalloc.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/3f81f4537238b9318fd18979ca2d5be521caea13
--
DragonFly BSD source repository
More information about the Commits
mailing list