Проверяет понимание базовых механизмов выделения памяти для переменных в языках программирования.
Когда программа запускается, операционная система выделяет ей адресное пространство, которое делится на несколько сегментов. Для переменных ключевыми являются стек и куча. Стек работает по принципу LIFO (последним пришёл — первым ушёл) и управляется автоматически: при входе в функцию выделяется кадр, при выходе — освобождается. Куча — это большая область для динамического выделения, где порядок выделения и освобождения не регламентирован.
Локальные переменные примитивных типов (числа, булевы значения) обычно размещаются в стеке, так как их размер известен на этапе компиляции. Объекты и структуры данных, размер которых может меняться, размещаются в куче. Ссылки на эти объекты хранятся в стеке. Например, в C++ при объявлении int x = 5; переменная x лежит в стеке, а при new MyClass() объект создаётся в куче, а указатель на него — в стеке.
void func() {
int a = 10; // стек
int* p = new int(20); // куча, p в стеке
delete p; // освобождение кучи
}В языках с ручным управлением (C, C++) программист обязан освобождать память из кучи, иначе возникает утечка. В языках с автоматическим управлением (Java, Python, JavaScript) работает сборщик мусора, который периодически находит неиспользуемые объекты и освобождает их. Это упрощает разработку, но может вызывать паузы в работе программы.
Понимание распределения памяти между стеком и кучей важно для написания эффективного кода: стек быстрее, но ограничен по размеру, куча гибче, но требует аккуратного управления. Знание этих механизмов помогает избегать утечек и оптимизировать производительность приложений.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
C
Ключевые слова
Подпишись на Golang Developer в телеграм