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);