Есть ли в C сборщик мусора, как в Java? - PullRequest
0 голосов
/ 07 февраля 2012

Что происходит в C, если мы делаем что-то подобное в Java:

    temp.next = temp.next.next;

Что будет с узлом temp.next? В Java есть дамп / сборщик мусора; Есть ли что-то подобное в C?

Ответы [ 3 ]

6 голосов
/ 07 февраля 2012

С этим ничего не случится.Он будет продолжать использовать память, и вы потеряете все средства, чтобы использовать его или освободить его.

В C вы должны явно free материал, который вы получили через malloc, когда закончите с ним,нет такой вещи как подсчет ссылок или сборка мусора.

4 голосов
/ 07 февраля 2012

C не имеет автоматической сборки мусора.Если вы теряете объект, у вас есть так называемая «утечка памяти».Память все равно будет выделена программе в целом, но ничто не сможет ее использовать, если вы потеряли последний указатель на нее.Управление ресурсами памяти является ключевым требованием для программ на Си.Поэтому, когда вы динамически выделяете память в C, вам нужно знать, когда и как она будет освобождена.

Существуют инструменты, предназначенные для того, чтобы помочь вам.Одним из известных является valgrind, в котором используется технология, аналогичная имеющейся в продаже Purify .

1 голос
/ 07 февраля 2012

В c, если вы не free памяти, выделенной через malloc, она просто будет сидеть и ничего не делать, пока не закончится выполнение программы.

В отличие от Java, C не имеет сборки мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...