On Thursday, 6 March 2025 at 16:11:37 UTC, Ali Çehreli wrote:
On 3/6/25 6:34 AM, Paul Backus wrote:
> are allowed to refer to the same memory location. However,
there are
> still cases where *dereferencing* those pointers can lead to
undefined
> behavior.
This topic came up among colleagues recently. I think such
restrictions come from CPU architectures where, as I remember
reading on C++ forums years ago, the mere act of loading a
misaligned pointer value into a pointer register would cause an
error (trap?).
ARM is like that, but I think you really must make a load out of
that pointer.
I cast any odd pointer value to any sized integer (and in one
case to a struct pointer) from a void* buffer area and it works
on the Intel CPU that I am working on.
As long as pointer is properly aligned for the data in question
eg 4 bytes for int* pointer it should still work.
Will this work on all or most modern CPUs?
Ali
—
Dmitry Olshansky
dmitry at olshansky.me
https://olshansky.me