when you call malloc(100 MB), the kernel does not give you 100 MB of RAM
it gives you a promise
physical pages are allocated as you touch them
this is why processes can use more virtual memory than physical RAM, and why free() doesn't always return memory to the OS