Это утверждение о malloc
и free
верно для всех современных вычислительных операционных систем.Но утверждение в целом отражает полное недопонимание цели сборки мусора.
Причина, по которой вы вызываете free
, заключается не в том, чтобы убирать вещи после завершения вашей программы.Причина, по которой вы вызываете free
, заключается в том, чтобы разрешить повторное использование памяти во время последующего выполнения долго выполняющейся программы.
Рассмотрим сервер сообщений, который обрабатывает сто сообщений в секунду.Вы звоните malloc
, когда получаете новое сообщение.И тогда вы должны сделать много вещей с этим.Возможно, вам придется войти в систему.Возможно, вам придется отправить его другим клиентам.Возможно, вам придется записать его в базу данных.Когда вы закончите, если вы этого не сделаете, через несколько дней у вас в памяти останутся миллионы сообщений.Таким образом, у вас есть для вызова free
.
Но когда вы звоните free
?Когда один клиент завершил отправку сообщения, другой клиент все еще может его использовать.И, возможно, база данных по-прежнему нуждается в этом.
Цель сборки мусора - обеспечить освобождение используемой памяти объекта (чтобы ее можно было повторно использовать для хранения нового сообщения в течение времени жизни приложения) без необходимости загружатьприкладной программист с обязанностями (и рисками), связанными с отслеживанием, когда объект больше не требуется ни для какого кода, который может его использовать.
Если приложение не выполняется слишком долго или нетесть какие-либо объекты, время жизни которых трудно определить, тогда сборка мусора не очень помогает.Есть и другие методы (например, указатели с подсчетом ссылок), которые могут обеспечить многие из тех же преимуществ, что и сборка мусора.Но есть реальная проблема, которую сборщик мусора решает.