Dynamic memory allocation allows a program to allocate memory at runtime, adjusting the memory size based on the program's needs. The malloc
function in C allocates memory from the heap, and when it is no longer needed, free
is called to release the memory back.
In a standard implementation, malloc
maintains a list of free memory blocks and allocates memory from it. If a block is large enough, malloc
splits it and returns a part of it. When free
is called, the memory is added back to the list of free blocks.
A Binary Search Tree is a data structure in which each node has at most two children: a left child and a right child. For each node:
In this implementation, the BST is used to efficiently manage free memory blocks. Each node of the tree represents a free memory block with:
The blocks are inserted into the BST, maintaining the BST property where blocks are ordered by their starting addresses.
Instead of allocating memory from the system directly (via OS calls), you allocate a fixed-size pool of memory at the start, which simulates the heap. The pool is managed by the malloc
and free
functions, with free blocks stored in the BST.
#define MEMORY_POOL_SIZE 1024 * 1024 // 1 MB
char memory_pool[MEMORY_POOL_SIZE];
This memory_pool
is used for all memory allocations, and the malloc
function will return pointers to portions of this pool.
malloc
Operation (Allocation)When malloc
is called: