3 ms·
yeah, 64bit is a lot of address space, and masking/shifting provides quite a few bits if one is willing to manage their own pointers.
by xxs 7y ago
yeah, 64bit is a lot of address space, and masking/shifting provides quite a few bits if one is willing to manage their own pointers.
- rocqua 7y agoHard to get this done properly in C I imagine. You're getting into UB the moment you start bit-fiddling with pointers I think.
- PeCaN 7y agoNah, so long as you cast to an integer (preferably uintptr_t) before fiddling with it you're fine¹ ― ¹ I think, but to be honest it's been some time since I really knew the arcane C rules and I'm not confident anymore
- vnorilo 7y agoNot UB but rather implementation defined. The compiler will not do anything weird here, but you rely on platform behavior that's not specified by the C lang spec.
- Asooka 7y agoNot UB in the slightest. You can take a pointer, cast it to uintptr_t, do whatever you want to that int, then cast it back to a pointer. It's only UB if the resulting pointer isn't valid or you cast it to the wrong type (and strict aliasing is enabled.
- rocqua 7y agoHm, good to know.