This document discusses dynamic memory allocation using explicit allocators like malloc and free in C. It covers basic data representations and alignment requirements for different data types. It then discusses simple explicit memory allocators using implicit lists to track free blocks. Different methods for finding free blocks, allocating within blocks, and coalescing free blocks are described, including using boundary tags to allow bidirectional coalescing of blocks in the implicit list. Maintaining good performance and memory utilization for dynamic memory allocation is also addressed.