Virtualizing the memory will allow multiple programs running at the same time and provide protection to the actual memory. Each process will have an abstraction to use the physical memory and their own address space (so different processes won’t affect each other’s memory).

The three goals for VM are:

Memory APIs

in C, we have access to heap by using malloc() and free() and all the other behaviors are done to stack.