Memory Management in Dot net Framework
Stack and Heap places the .NET framework stores items in memory as your code executes
The stack is used for static memory allocation and Heap for dynamic memory allocation, both stored in the computer's RAM.
Stack |
Heap Memory |
bool,byte,char,decimal,double,enum,float int,long,sbyte,short,struct |
class,interface,delegate,object,string |
Variables allocated on the stack are stored directly to the memory
|
Variables allocated on the heap have their memory allocated at run time
|
both memory & data on the same location |
Not the same |
The stack is thread-specific |
Heap is application-specific. |
stack track the running memory |
Heap doesn’t track the running memory |
Value Types are also sometimes placed on the Heap.
Stack:
public int Mystackmethod()
{
MyInt x ;
// it only allocates a stack variable MyInt (and sets it to null).
x = new MyInt();
x.Value = 3;
return x.Value;
}
know exactly how much data before compile time.
Heap Memory:
public class Myclassheap
{
public int Value;
//value type (no longer accessed, its memory deallocated)
}
don't know exactly how much data you will need at runtime , keep in heap.
The stack is always reserved in a LIFO order. When the top box in the stack is no longer used, it's thrown out (clean up).
Similarly for Heap is clean by Garbage Collection. Simply find all objects in the Heap that is not being accessed by the main program and delete them and allocates memory to other objects.