The memory models that underlie programming languages