On Tue, 11 Nov 2025 14:11:28 GMT, Harald Eilertsen <[email protected]> wrote:

> `jdk.internal.foreign.SegmentFactories::allocateNativeInternal` assumes that 
> the underlying implementation of malloc aligns allocations on 16 byte 
> boundaries for 64 bit platforms, and 8 byte boundaries on 32 bit platforms. 
> So for any allocation where the requested alignment is less than or equal to 
> this default alignment it makes no adjustment.
> 
> However, this assumption does not hold for all allocators. Specifically 
> jemallc, used by libc on FreeBSD will align small allocations on 8 or 4 byte 
> boundaries, respectively. This causes allocateNativeInternal to sometimes 
> return memory that is not properly aligned when the requested alignment is 
> exactly 16 bytes.
> 
> To make sure we honour the requested alignment when it exaclty matches the 
> quantum as defined by MAX_MALLOC_ALIGN, this patch ensures that we adjust the 
> alignment also in this case.
> 
> This should make no difference for platforms where malloc allready aligns on 
> the quantum, except for a few unnecessary trivial calculations.
> 
> This work was sponsored by: The FreeBSD Foundation

Are you saying that jemalloc aligns allocations that are _exactly_ 16 bytes on 
an 8 byte boundary? How does this work when you want to allocate space for a 
single 16-byte size, 16-byte aligned value? (e.g. long double? I think FreeBSD 
uses the SysV ABI, right?)

-------------

PR Comment: https://git.openjdk.org/jdk/pull/28235#issuecomment-3517472567

Reply via email to