На комп'ютерних мовах, збір сміття є важливим компонентом управління пам'яттю. Це процедура автоматичної ідентифікації та звільнення пам’яті програми. У програмуванні C відсутні вбудовані можливості збирання сміття, оскільки це a низький рівень мова програмування. Однак існує ряд бібліотек, які пропонують функції збирання сміття для програм на C. У цій статті ми розглянемо збір сміття в C і як це реалізовано за допомогою, Бем-Демерс-Вайзер бібліотека збирача сміття.
C пропонує низькорівневі механізми керування пам'яттю через його malloc() і функції free(). . The метод free(). використовується для звільнення пам’яті, коли вона більше не потрібна, тоді як функція malloc(). використовується для динамічного розподілу пам'яті під час виконання. Основний синтаксис цих функцій такий:
void* malloc(size_t size); void free(void* ptr);
Покажчик на початок виділеної пам'яті повертається malloc() функцію в обмін на аргумент, який визначає кількість байтів, які потрібно виділити. Пам'ять, яка була раніше виділена метод malloc(). випускається функція free(). , що робить його доступним для додаткових асигнувань.
Хоча система керування пам’яттю C забезпечує велику гнучкість, вона також покладає тягар керування пам’яттю на програміста. Витоки пам’яті можуть бути наслідком неправильного використання підпрограм керування пам’яттю, коли пам’ять виділена, але ніколи не звільнена, або помилок сегментації, коли доступ до пам’яті здійснюється після її звільнення.
Техніка управління пам'яттю називається збір сміття автоматично визначає та звільняє пам'ять, яка більше не використовується програмою. Вивіз сміття робить програмісту непотрібним керувати пам’яттю вручну, що знижує ризик витоку пам’яті та помилок сегментації.
Для програми C, Бем-Демерс-Вайзер пропонує бібліотека збирача сміття збір сміття можливості. Пам'ять можна виділити за допомогою набору функцій бібліотеки, які також можна використовувати для автоматичної ідентифікації та звільнення пам'яті, яка більше не використовується. В бібліотеці працює а розмітка і підмітання техніка пошуку та звільнення пам’яті.
Синтаксис:
Основний синтаксис Бем-Демерс-Вайзер Функції бібліотеки збирача сміття такі:
зламати java
#include void* GC_malloc(size_t size); void* GC_calloc(size_tnmemb, size_t size); void* GC_realloc(void* ptr, size_t size); void GC_free(void* ptr);
У цьому синтаксисі, Функція GC_calloc(). використовується для виділення пам'яті та її ініціалізації нуль , тоді як Функція GC_malloc(). динамічно розподіляє пам'ять. Подібний до метод realloc(). в C, GC_realloc() функція використовується для перепризначення пам'яті. Вивільнення пам'яті здійснюється за допомогою Метод GC_free(). .
Давайте подивимося на ілюстрацію Бем-Демерс-Вайзер бібліотека збирача сміття в дії. Наступна програма використовує Функція GC_malloc(). щоб виділити пам'ять для кожного вузла, оскільки він будує пов'язаний список цілих чисел. Після цього друкуються значення пов’язаного списку, після чого програма завершує роботу.
#include #include typedef struct node { int value; struct node* next; } node; int main() { GC_INIT(); node* head = GC_malloc(sizeof(node)); node* current = head; for (int i = 1; ivalue = i; current->next = GC_malloc(sizeof(node)); current = current->next; } current->next = NULL; current = head; while (current != NULL) { printf('%d ', current->value); current = current->next; } return 0; }
Вихід:
Під час запуску програми створюється такий вихід:
1 2 3 4 5 6 7 8 9 10
Пояснення:
У цьому прикладі ми спочатку використовуємо GC_INIT() функція для ініціалізації збирача сміття. Після цього створюється головний вузол пов’язаного списку за допомогою Метод GC_malloc(). , і поточний вказівник змінюється, щоб вказувати на нього. Наступним кроком є використання циклу для додавання додаткових вузлів до зв’язаного списку, присвоєння значення кожного вузла лічильнику циклу змінна i і його наступний покажчик на вузол після нього в списку. Щоб сигналізувати про кінець списку, ми нарешті встановлюємо наступний покажчик останнього вузла в списку НУЛЬ .
Використовуючи a цикл while щоб переглянути список і надрукувати значення кожного вузла, а потім ми надрукуємо значення у зв’язаному списку. Нарешті ми повернути 0 щоб показати, що програма виконана успішно.
Висновок
У цій статті блогу ми розглянули Бем-Демерс-Вайзер реалізація бібліотеки збирача сміття для збирання сміття на C. Ми розглянули фундаментальний синтаксис функцій бібліотеки збирача сміття та показали, як їх використовувати у простому прикладі програми. Ми також говорили про вихід зразка програми та його важливість.
Загалом, збір сміття це важливий підхід, який може допомогти програмістам на C краще та ефективніше керувати пам’яттю. Програмісти на C можуть отримати прибуток від збирання сміття, використовуючи мову низького рівня за допомогою Бем-Демерс-Вайзер пакет збирача сміття.