When the compiler generates machine code, it must make the assumption that two pointers might point to the same, or overlapping memory. So if *a is loaded into a register, and *b gets written to, *a must be reloaded into the register if it's needed for another operation (1/2)