lean2
lean2 copied to clipboard
Align the result of `operator new` to `alignof(max_align_t)`
The C++ spec requires the result of operator new
to be aligned to alignof(max_align_t)
, which is 16 on x86_64 Linux. However, lean's operator new
returns 8 byte aligned memory under tcmalloc, where malloc_usable_size
, malloc_size
and _msize
are unavailable.
As clang assumes 16-byte-aligned memory and uses movaps
for zero-filling, 8-byte-aligned memory causes a segmentation fault.
The 8-byte alignment is from lean::save_alloc_size
in src/util/memory.cpp, that stores the size of allocation into a 8 byte leading region of the allocated memory chunk. So, to fix the alignment issue, the leading region should be alignof(max_align_t)
instead of a single size_t.
I think I'm having the same issue. I don't immediately know how your suggestion should be coded, though. Temporarily disabling TCMALLOC
at least gave me a working binary.