Value types and Reference types
Last updated
Last updated
The value type stores data directly in Stack memory
Reference types only store addresses in the Stack, while variable values ​​are located elsewhere (Heap).
A reference type that stores its contents in allocated memory is Stack. When we create a variable of value type, a memory area will be allocated to store the value of the variable directly.
If you assign it to another variable, the value will be copied directly and both variables will work independently.
Reference data types in .NET:
Integer types
Real number type
Logical type bool
Character type char
Structure type
Enum
Reference types are used to store a reference value (memory address) of an object but do not store the object itself.
Because the reference type only stores the address of the variable's memory instead of the value of the variable, when assigning a reference variable to another variable, it does not copy the data, it only copies the reference address.
So both variables will refer to the same address on the Heap memory.
This means that when a reference variable is deprecated, it will be marked for the Garbage collection.
Reference data types:
Classs
Object
Array
Indexer
Interface
Stack is statically allocated memory and Heap is dynamically allocated memory, both are stored on the computer's RAM.
You can use Stack if you know for sure the size of the data to be stored before compiling the program, it cannot be too large.
You can use the 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-thread application, each thread will have its own stack but they will share heap memory. The stack is separate for each thread and the heap is shared across the entire application.
Stack
Heap
Memory is managed automatically
Memory is managed manually
Small size
Large size
Easy and fast access, easy cache
Difficult to cache because it is scattered in memory
Inelastic, allocated memory cannot be changed
Flexible, allocated memory can be changed
Limited to thread scope
Get access to the entire application
The operating system allocates the stack when the thread is created
The operating system is called by the language at application runtime to allocate heap for the application.
Static allocation
Issuance of activation
The size must be known at compile time
Variable size is unknown at compile time
Done at compile time
Executed at runtime
Assigned to stack
Assign to heap
FILO (First – in, last- out)
Straggling
We have 2 data types: value and reference:
Values ​​are small, fixed-size data types whose values ​​are stored directly on Stack memory.
Reference is a type that only stores addresses on the stack and values ​​​​stores on the heap.
Both types of memory are stored in RAM, it's just a different area. One side is static allocation, the other side is dynamic allocation.
Why must it be divided?
Because with large data types, such as objects, it is impossible to know its size at compile time, so it is not stored on the stack but only stores the address of the Heap, because the heap is dynamically allocated memory.
For example: We read a Harry Porter book, instead of saying I read Harry Porter book 1 , I have to say I read …. from the first sentence to the last sentence... do you know? Instead of having to state the entire content of the very long book, we just need to refer to the name of the book, which is the memory cell address pointing to the book's content. As for the book's content, that person will read it for himself.
As for short sentences, we can always say them in conversation. For example: Have you eaten rice yet? That sentence is not in any book or it is very short so it can be said in conversation.
That's the type of greed.