Dynamic memory allocation allows programs to request additional memory at runtime as needed, rather than having a fixed amount allocated at compile time. The malloc function allocates memory on the heap and returns a pointer to it. This memory must later be freed using free to avoid memory leaks. Calloc initializes allocated memory to zero, while realloc changes the size of previously allocated memory. C supports dynamic memory allocation through library functions like malloc, calloc, free and realloc.