Reference type and value type:-
Before
going to decision value type and reference type we should know about Data
type
What is Data type?
Data type means
difference type of data such as integer, string, char, float etc.
But we can
also say data type is in the form of structure or class or reference.
As we know
that there are two type of memory in for storing values at runtime of program
in C#.
1.
Stack
2.
Heap
The data
types which are value type it will store on stack memory.
The data
types which are reference or class type it will store on heap memory.
Difference between a Value Type and
a Reference Type
The
Types in .NET Framework are either treated by Value Type or by Reference Type.
A Value Type holds the data within its own memory allocation and a Reference
Type contains a pointer to another memory location that holds the real data.
Reference Type variables are stored in the heap while Value Type variables are
stored in the stack.
Value Type:
A
Value Type stores its contents in memory allocated on the stack. When you
created a Value Type, a single space in memory is allocated to store the value
and that variable directly holds a value. If you assign it to another variable,
the value is copied directly and both variables work independently. Predefined
datatypes, structures, enums are also value types, and work in the same way.
Value types can be created at compile time and Stored in stack memory, because
of this, Garbage collector can't access the stack.
e.g.
int x = 3033;
Here
the value 3033 is stored in an area of memory called the stack.
Reference Type:
Reference
Types are used by a reference which holds a reference (address) to the object
but not the object itself. Because reference types represent the address of the
variable rather than the data itself, assigning a reference variable to another
doesn't copy the data. Instead it creates a second copy of the reference, which
refers to the same location of the heap as the original value. Reference Type
variables are stored in a different area of memory called the heap. This means
that when a reference type variable is no longer used, it can be marked for
garbage collection. Examples of reference types are Classes, Objects, Arrays,
Indexers, Interfaces etc.
e.g.
int[] iArray = new int[33];
In
the above code the space required for the 30 integers that make up the array is
allocated on the heap.
Stack and Heap
Stack
is used for static memory allocation and Heap for dynamic memory allocation,
both stored in the computer's RAM.
Differences between Stack and Heap
Stack and a Heap ?
Stack
is used for static memory allocation and Heap for dynamic memory allocation,
both stored in the computer's RAM .
Variables
allocated on the stack are stored directly to the memory and access to this
memory is very fast, and it's allocation is dealt with when the program is
compiled. When a function or a method calls another function which in turns
calls another function etc., the execution of all those functions remains
suspended until the very last function returns its value. The stack is always
reserved in a LIFO order, the most recently reserved block is always the next
block to be freed. This makes it really simple to keep track of the stack,
freeing a block from the stack is nothing more than adjusting one pointer.
Variables
allocated on the heap have their memory allocated at run time and accessing
this memory is a bit slower, but the heap size is only limited by the size of
virtual memory . Element of the heap have no dependencies with each other and
can always be accessed randomly at any time. You can allocate a block at any
time and free it at any time. This makes it much more complex to keep track of
which parts of the heap are allocated or free at any given time.
You
can use the stack if you know exactly how much data you need to allocate before
compile time and it is not too big. You can use heap if you don't know exactly
how much data you will need at runtime or if you need to allocate a lot of
data.
In
a multi-threaded situation each thread will have its own completely independent
stack but they will share the heap. Stack is thread specific and Heap is
application specific. The stack is important to consider in exception handling
and thread executions.
No comments:
Post a Comment