The various Interlocked functions (InterlockedIncrement, and so on) require that the variable being updated be properly aligned, even on x86, a platform where the CPU silently fixes unaligned memory access invisibly.
If you pass an unaligned pointer to one of the Interlocked functions, the operation will still succeed, but the result won't ...