Heap vs Stack vs Static Memory
Static Memory
- Static memory is a type of memory that is allocated at compile-time.
 - It is used to store data that will not change during the execution of the program.
 - static variables, string literals, program’s binary are stored here.
 - Static memory is typically allocated in a section of memory known as the data segment.
 - Since static memory is allocated at compile-time, it is not possible to dynamically allocate or deallocate memory in this segment at runtime.
 - Cleans up after the program’s execution.
 
Stack Memory
- contains function arguments, local variables,
 - The stack stores values in the order it gets them and removes the values in the opposite order. This is referred to as last in, first out.
 - Used for storing function call parameters and local variables.
 - Limited in size and has a fixed size for each data item.
 - Data on the stack must have a known, fixed size.
 - Accessing data on the stack is faster than accessing data on the heap.
 - Works well for data that needs to be accessed sequentially and is close to other data.
 
Heap Memory
- Stores data in a less organized manner.
 - Used for dynamically allocating memory at runtime.
 - Allocating on the heap involves requesting a certain amount of space and receiving a pointer to that location.
 - Can store data with an unknown or variable size at compile time.
 - Requires the use of pointers to access data on the heap.
 - Accessing data on the heap is slower than accessing data on the stack due to pointer indirection.
 - Can accommodate larger amounts of data and data structures.
 - Allows for flexible memory management but requires manual deallocation to avoid memory leaks.