Let's dig in with the holder of our data, Atomic. This structure is from the crossbeam_epoch library and its implementation is in src/atomic.rs:
pub struct Atomic<T> { data: AtomicUsize, _marker: PhantomData<*mut T>, } unsafe impl<T: Send + Sync> Send for Atomic<T> {} unsafe impl<T: Send + Sync> Sync for Atomic<T> {}
The representation is a little odd: why not data: *mut T? Crossbeam's developers have done something neat here. On modern machines, there's a fair bit of space inside of pointer to store information, in the least significant bits. Consider that if we point only to aligned data, the address of a bit of memory will be multiples of 4 on a 32-bit system, or multiples of 8 on a 64-bit system. This leaves either ...