Heap - это область памяти, в которой располагаются объекты.
Heap постоянно проверяется
сборщиком мусора.
Сборщик мусора удаляет объекты из памяти, которые не нужны.
Данные для
ссылочных типов создаются в heap во время выполнения программы.
C#
class Program
{
static void Main(string[] args)
{
Calculate(10);
}
static void Calculate(int param1)
{
string text1 = "Hello";
int x = 6;
int y = x + param1;
}
}
Метод
Calculate(10) выполняется:
Все переменные, а это:
param1,
text1,
x,
y добавятся в stack.
• Переменная
param1. значение переменной
param1 это 10 кладется в stack (
int -
тип значения)
• Что происходит с переменной
text1? (
string -
ссылочный тип)
В
stack кладется ссылка на
heap
В
heap кладется значение "Hello"
• Переменная
x. значение переменной
x это 6 кладется в stack (
int -
тип значения)
• Переменная
y. значение переменной
y это 16 кладется в stack (
int -
тип значения)
C#
struct Place
{
public int x = 45;
public int y = 67;
}
class Book
{
public int Name = "Fantastic";
public int Price = 20;
}
class Program
{
private static void Main(string[] args)
{
Place place1 = new Place();
Book book1 = new Book();
}
}
Когда
объект ссылочного типа перестает использоваться,
тогда ссылка из стека удаляется.
После этого
сборщик мусора проверяет, что на наш объект нет ссылок, и удаляет объект из heap.
{
public int x = 45;
public int y = 67;
// structures need constructors
// while such initialing is prohibited ! Check it out by yourself !
}
class Book
{
public int Name = "Fantastic";
// that's a typo : string type instead...
public int Price = 20;
}