Как сборщик мусора Боема освобождает память, не создавая отдельный поток для GC?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как сборщик мусора Боема освобождает память, не создавая отдельный поток для GC?

Сообщение Anonymous »

В C обычный рабочий процесс динамического выделения выглядит следующим образом:

Код: Выделить всё

#include 
#include 

int main() {
int *ptr = malloc(sizeof(int));

if (ptr == NULL)
return 1;

// Free the allocated memory
free(ptr);

return 0;
}
Любое отсутствие функции free() приводит к утечке памяти.
Если мы используем GC Боема, рабочий процесс будет выглядеть следующим образом:< /p>

Код: Выделить всё

#include 
#include 

int main() {
int *ptr = GC_MALLOC(sizeof(int));

// No need to free memory explicitly, the GC will handle it

return 0;
}
Насколько я знаю, это не приводит к утечке памяти.
Мой вопрос: что именно освобождает выделенную память?Я имею в виду, насколько я понимаю, GC_MALLOC выполняет цикл сборки мусора, если это необходимо, выделяет память, а затем возвращает (и это конец), и программа продолжает работу. Но последующих вызовов функций GC для освобождения памяти я не вижу. Означает ли это, что GC_MALLOC() создает отдельный поток для работы сборщика мусора, чтобы иметь возможность позже освободить память?
Другими словами, как сборщик мусора продолжать работать, если все его функции вернулись? Использует ли он atexit()?

Подробнее здесь: https://stackoverflow.com/questions/793 ... rate-threa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»