Я начал искать и читать об ALDS и управлении памятью недавно после того, как у меня возникло сомнение в распределении памяти, и после нескольких дней обучения я узнал много вещей об управлении памятью, но фактические сомнения остаются нерешенными.
Таким образом, сомнение заключается в том, что при выделении памяти для переменной, как именно система узнает, какой блок памяти доступен, а какой свободен, и точно так же, когда мы разрушаем объект или устанавливаем переменную как ноль, или когда GC освобождаетсянекоторая память, что именно он делает с этим блоком памяти, как Я знаю, что фактические данные никогда не стираются при удалении, этот блок просто помечается как свободный где-то в некоторой таблице, но эта таблица отслеживает каждую икаждый бит в памяти, если да, то не станет ли это большим количеством данных для хранения?
Например, если я объявлю связанный список, то блок будет выделен в куче, а следующий блок будет иметь нулевое значение, так как нет другого узла для ссылки, теперь, когда я продолжаю добавлять в него больше узловСистема будет продолжать выделять больше блоков, каждый из которых содержит ссылку на следующий.Теперь эти блоки могут присутствовать в случайных местах в зависимости от доступности памяти во время выделения, и доступ к ним возможен только через их исходящие узлы.
Итак, теперь для любого данного блока памяти, как система будет знатьесли он свободен и содержит только мусорное значение, или это фактически узел какого-либо связанного списка.