Вы можете делать сборку мусора в C. Это называется консервативная сборка мусора . Хитрость заключается в том, чтобы обрабатывать любые данные, которые выглядят как указатель, как если бы это был фактически указатель, а не восстанавливать память, доступную через них. Есть две проблемы: во-первых, вы не можете перемещать данные (т. Е. Сжатие) из-за неопределенности того, является ли что-то, что похоже на указатель, фактически указателем (поэтому его обновление для указания нового местоположения может привести к повреждению данных ).
Проблема безопасности типов заключается в том, что программист C может сохранить указатель на int, выполнить математические операции с ним, а затем восстановить указатель (как в: ptrdiff_t d = (ptrdiff_t) ptr; ptr = NULL; d += 42; /* GC here would be bad */ d -= 42;
). Это скрытие указателя может привести к консервативному сборщик мусора для преждевременного восстановления памяти, которая была доступна только через этот указатель.