logo

C의 가비지 수집

컴퓨터 언어에서는 쓰레기 수거 메모리 관리의 중요한 구성 요소입니다. 프로그램의 메모리를 자동으로 식별하여 해제하는 절차입니다. C 프로그래밍에는 기본 제공 가비지 수집 기능이 부족합니다. 낮은 수준의 프로그래밍 언어. 그러나 C 프로그램에 대한 가비지 수집 기능을 제공하는 라이브러리가 많이 있습니다. 이 기사에서는 C의 가비지 수집과 이를 사용하여 구현하는 방법을 살펴보겠습니다. Boehm-Demers-Weiser 가비지 컬렉터 라이브러리.

C는 다음을 통해 저수준 메모리 관리 메커니즘을 제공합니다. malloc() 그리고 free() 함수 . 그만큼 free() 메소드 더 이상 필요하지 않을 때 메모리를 해제하는 데 사용됩니다. malloc() 함수 런타임 중에 동적으로 메모리를 할당하는 데 사용됩니다. 이러한 함수의 기본 구문은 다음과 같습니다.

 void* malloc(size_t size); void free(void* ptr); 

할당된 메모리의 시작 부분에 대한 포인터가 반환됩니다. malloc() 할당할 바이트 수를 지정하는 인수를 대신하는 함수입니다. 이전에 할당된 메모리 malloc() 메서드 에 의해 출시됩니다. free() 함수 , 추가 할당을 위해 액세스할 수 있도록 합니다.

자바의 인스턴스화

C의 메모리 관리 시스템은 많은 유연성을 허용하지만 프로그래머에게 메모리 관리 부담을 주기도 합니다. 메모리 누수는 메모리가 할당되었지만 해제되지 않은 경우 메모리 관리 루틴을 부적절하게 사용하거나 메모리가 해제된 후 메모리에 액세스하는 분할 오류로 인해 발생할 수 있습니다.

이라고 불리는 메모리 관리 기술 쓰레기 수거 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 식별하고 해제합니다. 쓰레기 수거 프로그래머가 메모리를 수동으로 관리할 필요가 없으므로 메모리 누수 및 분할 오류의 위험이 줄어듭니다.

C 프로그램의 경우, Boehm-Demers-Weiser 가비지 수집기 라이브러리 제공 쓰레기 수거 능력. 메모리는 라이브러리의 함수 모음을 사용하여 할당할 수 있으며 더 이상 사용하지 않는 메모리를 자동으로 식별하고 해제하는 데에도 사용할 수 있습니다. 도서관은 다음을 고용합니다. 마크 앤 스윕 메모리를 찾아서 해제하는 기술.

C# 사전

통사론:

기본 구문은 Boehm-Demers-Weiser 가비지 수집기 라이브러리 기능은 다음과 같습니다.

 #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() 메서드 .

의 그림을 살펴보겠습니다. Boehm-Demers-Weiser 가비지 수집기 라이브러리가 작동 중입니다. 다음 프로그램은 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() 메서드 , 현재 포인터가 이를 가리키도록 변경됩니다. 다음 단계는 루프를 사용하여 연결 리스트에 더 많은 노드를 추가하고 각 노드의 값을 루프 카운터에 할당하는 것입니다. 변수 나는 그리고 목록에서 그 다음 노드에 대한 다음 포인터입니다. 목록의 끝을 알리기 위해 마지막으로 목록의 마지막 노드의 다음 포인터를 다음으로 설정합니다. 없는 .

사용하여 while 루프 목록을 살펴보고 각 노드의 값을 인쇄한 다음 연결된 목록의 값을 인쇄합니다. 마지막으로 우리는 0을 반환 프로그램이 성공적으로 실행되었음을 보여줍니다.

결론

이번 블로그 글에서 우리는 Boehm-Demers-Weiser 가비지 수집기 라이브러리의 C 언어 가비지 수집 구현. 가비지 수집기 라이브러리 함수의 기본 구문을 조사하고 이를 간단한 예제 프로그램에서 사용하는 방법을 보여주었습니다. 또한 샘플 프로그램의 출력과 그 중요성에 대해서도 이야기했습니다.

전반적인, 쓰레기 수거 C 프로그래머가 더 우수하고 효과적인 메모리 관리를 할 수 있도록 지원하는 중요한 접근 방식입니다. C 프로그래머는 다음을 사용하여 저수준 언어를 활용하면서 가비지 수집으로 이익을 얻을 수 있습니다. Boehm-Demers-Weiser 가비지 컬렉터 패키지.