StudyCode
middlememory

Как работает сборка мусора?

Войди для отслеживания
Ответ

GC автоматически освобождает память от объектов, на которые нет ссылок. JS и Python используют подсчёт ссылок + mark-and-sweep. C# (.NET) — трёхпоколенный GC. C++ не имеет GC — память управляется вручную (new/delete) или через умные указатели (unique_ptr, shared_ptr).

JSJavaScriptPYPythonC#C#C++C++
Примеры кода:
JSJavaScript
// GC автоматический, но утечки возможны
let obj = { data: new Array(1000000) };

// Утечка: глобальная ссылка не удаляется
window.leak = obj;

// Правильно: обнулить ссылку
obj = null; // теперь GC может собрать
C++C++
// Ручное управление памятью
int* ptr = new int(42);
delete ptr; // обязательно!

// Умные указатели (C++11) — лучший подход
#include <memory>
auto ptr = std::make_unique<int>(42);
// delete не нужен — RAII освободит автоматически

// shared_ptr — подсчёт ссылок
auto shared = std::make_shared<int>(42);