Utilization vs throughput is conflicting goals. Big Picture OS: creates new process sets up address space/segments read the executable, load instructions, global data libraries gets loaded Complier: set up stack Heap Allocator: “Sandbox of bytes” initialize the heap heap allocation: client void *malloc(size_t size); Returns a pointer to a block of heap memory of at least size bytes, or NULL if an error occurred. void free(void *ptr); Frees the heap-allocated block starting at the specific address. void *realloc(void *ptr, size_t size); Changing the size of a pointer and realloc if needed See Heap allocator