lean2 icon indicating copy to clipboard operation
lean2 copied to clipboard

Align the result of `operator new` to `alignof(max_align_t)`

Open tzik opened this issue 6 years ago • 1 comments

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.

tzik avatar Aug 21 '17 12:08 tzik

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.

ghost avatar Oct 01 '18 15:10 ghost