Why Virtual Memory Hides Real Memory From Programs
When a program prints a pointer, it looks like it has obtained “a memory address.” Many wrong assumptions start there.
On systems such as Linux, the address seen by a user program is usually not a physical memory address. It is a virtual address. The same 0x400000 in two different processes can point to completely different physical pages. A pointer from one process is not directly meaningful in another process.