Unsafe making too strong assumptions about array alignment?
some-java-user-99206970363698485155 at vodafonemail.de
some-java-user-99206970363698485155 at vodafonemail.de
Tue May 27 22:30:23 UTC 2025
Yes, that is what I meant. But I am not sure if compact object headers
would be really a problem. I think in that case for example
ARRAY_BYTE_BASE_OFFSET would simply be < 16, but since that base offset
is included in the offset value passed to `putLongUnaligned`, it would
detect alignment / misalignment correctly. The problem I was thinking of
is rather if it can happen that the native address of the array is not
actually aligned by 8 (the size of a long). Which would not be
noticeable by `putLongUnaligned` since the address of the array is
unknown to it, and it would make wrong conclusions about whether the
access is aligned or not.
A few days ago I accidentally only responded to Maurizio instead of the
mailing list. I will repeat my message here:
My concern here is that the code in `putLongUnaligned` decides if it is
an unaligned store just based on the `offset`, and I am wondering if
that information alone is really enough to tell that.
Because if it determines that the store is aligned it delegates to
`putLong` and that requires that the store is aligned, if that is not
actually the case it is undefined behavior (if I understand it correctly).
So this means the JVM must guarantee that the physical address of the
array is aligned by 8 to make sure `putLongUnaligned` for a byte[] is
actually safe?
-----------
Am 27.05.2025 um 18:53 schrieb Andrew Haley:
> On 5/26/25 13:23, Maurizio Cimadamore wrote:
>> But, as Andrew suggests, if `base` is guaranteed to be a multiple of 8,
>> we can effectively ignore it for the purpose of the modulo operator
>> (e.g. N + X % 8 == X if N % 8 == 0).
>>
>> Because of this,_under that assumption_, the Unsafe Java code is
>> correct -- e.g. it will never attempt to perform an aligned store at an
>> unaligned physical address.
>
> Well, yes. Which was OP's point, I think. `base` isn't really
> guaranteed to be a multiple of 8 on all VMs, and as Rémi said, may
> soon not be on HotSpot.
>
More information about the panama-dev
mailing list