What is Dynamic Memory Allocation?

Resources are always a premium. We have strived to achieve better utilization of resources at all times; that is the premise of our progress. Related to this pursuit, is the concept of memory allocation.

Memory has to be allocated to the variables that we create, so that actual variables can be brought to existence. Now there is a constraint as how we think it happens, and how it actually happens.

How computer creates a variable?
When we think of creating something, we think of creating something from the very scratch, while this isn’t what actually happens when a computer creates a variable ‘X’; to the computer, is more like an allocation, the computer just assigns a memory cell from a lot of pre-existing memory cells to X. It’s like someone named ‘RAJESH’ being allocated to a hotel room from a lot of free or empty pre-existing rooms. This example probably made it very clear as how the computer does the allocation of memory.

Now, what is Static Memory Allocation? When we declare variables, we actually are preparing all the variables that will be used, so that the compiler knows that the variable being used is actually an important part of the program that the user wants and not just a rogue symbol floating around. So, when we declare variables, what the compiler actually does is allocate those variables to their rooms (refer to the hotel analogy earlier). Now, if you see, this is being done before the program executes, you can’t allocate variables by this method while the program is executing.

filter_none

edit
close

play_arrow

link
brightness_4
code

// All the variables in below program
// are statically allocated.
void fun()
{
   int a;
}
int main()
{
   int b;
   int c[10]
}

chevron_right


Why do we need to introduce another allocation method of this just gets the job done? Why would we need to allocate memory while the program is executing? Because, even though it isn’t blatantly visible, not being able to allocate memory during run time precludes flexibility and compromises with space efficiency. Specially, those cases where the input isn’t known beforehand, we suffer in terms of inefficient storage use and lack or excess of slots to enter data (given an array or similar data structures to store entries). So, here we define Dynamic Memory Allocation: The mechanism by which storage/memory/cells can be allocated to variables during the run time is called Dynamic Memory Allocation (not to be confused with DMA). So, as we have been going through it all, we can tell that it allocates the memory during the run time which enables us to use as much storage as we want, without worrying about any wastage.

filter_none

edit
close

play_arrow

link
brightness_4
code

int main()
{
   // Below variables are allocated memory
   // dynamically.
   int *ptr1 = new int;
   int *ptr2 = new int[10];
  
   // Dynamically allocated memory is
   // deallocated 
   delete ptr1;
   delete [] ptr2;
}

chevron_right


There are two types of available memories- stack and heap. Static memory allocation can only be done on stack whereas dynamic memory allocation can be done on both stack and heap. Example of dynamic allocation to be done on stack is recursion where the functions are put into callstack in order of their occurrence and popped off one by one on reaching the base case. Example of dynamic memory allocation on heap is:

filter_none

edit
close

play_arrow

link
brightness_4
code

int main()
{
   // Below variables are allocated memory
   // dynamically on heap.
   int *ptr1 = new int;
   int *ptr2 = new int[10];
  
   // Dynamically allocated memory is
   // deallocated 
   delete ptr1;
   delete [] ptr2;
}

chevron_right


While allocating memory on heap we need to delete the memory manually as memory is not freed( deallocated) by the compiler itself even if the scope of allocated memory finishes( as in case of stack).

To conclude above topic, static memory is something that compiler allocates in advance. While dynamic memory is something that is controlled by the program during execution. Program may ask more of it or may delete some allocated.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :
Practice Tags :


3


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.