C++의 가비지 컬렉션

Suraj P 2023년10월12일
  1. 메모리 관리 기술로서의 가비지 컬렉션
  2. C++의 수동 메모리 관리
  3. C++의 수동 메모리 관리 문제
  4. 가비지 수집 알고리즘
C++의 가비지 컬렉션

이 기사에서는 C++의 가비지 수집에 대해 알아봅니다.

메모리 관리 기술로서의 가비지 컬렉션

가비지 컬렉션은 프로그래밍 언어에서 사용되는 메모리 관리 기술 중 하나입니다. 많은 프로그래밍 언어에 기능으로 추가된 자동 메모리 관리 기술입니다.

가비지 수집기는 변수 또는 개체에 할당된 메모리를 수집하거나 회수하지만 프로그램에서 더 이상 사용하지 않습니다. 이것은 쓰레기라고도합니다.

한 가지 유의할 점은 가비지 수집기는 파일과 같은 리소스 또는 메모리만 관리한다는 것입니다. UI 창과 소멸자는 처리되지 않습니다.

Java, C# 및 대부분의 스크립팅 언어와 같은 언어에는 효율성 향상을 위해 언어의 일부로 가비지 수집 기능이 있습니다.

그러나 C++와 같은 언어에는 수동 메모리 관리가 있습니다. 즉, 프로그래머가 new,, delete, 또는 일부 알고리즘과 같은 명령을 사용하여 수동으로 메모리 관리를 수행해야 합니다.

C++의 수동 메모리 관리

동적 메모리 할당은 런타임 동안 영역에 할당되는 메모리 유형입니다. 그 메모리 사용을 중단하면 해제해야 합니다. 그렇지 않으면 메모리 누수가 발생할 수 있습니다.

C++에서 메모리 할당 및 할당 해제는 new 또는 delete.와 같은 명령을 사용하여 수동으로 수행됩니다. new 키워드는 힙에서 동적으로 메모리를 할당합니다.

사용이 완료되면 delete 키워드를 사용하여 메모리 할당을 해제하고 지웁니다. 내부적으로는 소멸자를 호출하여 메모리를 파괴합니다.

따라서 메모리 누수를 방지하기 위해 new 뒤에는 항상 delete 명령이 와야 합니다.

예제 코드:

#include <bits/stdc++.h>
using namespace std;

int main() {
  int *arr = new int[5];  // 5 blocks of memory allocated

  if (!arr)
    cout << "Memory allocation failed\n";
  else {
    for (int i = 0; i < 5; i++) arr[i] = i + 1;

    cout << "Value stored in memory blocks ";
    for (int i = 0; i < 5; i++) cout << arr[i] << " ";
  }

  delete[] arr;  // deallocates the block of memory
}

출력:

Value stored in memory blocks 1 2 3 4 5

C++의 수동 메모리 관리 문제

한 가지 중요한 문제는 delete,를 사용하는 것을 잊어버려 메모리 누수가 발생할 수 있다는 것입니다. 두 번째 주요 문제는 많은 동적 메모리 할당이 발생하는 광범위한 프로그램을 처리할 때 이미 사용 중인 메모리를 실수로 할당 해제할 수 있다는 것입니다.

가비지 수집 알고리즘

특히 C++과 같은 언어의 프로그램에서 가비지 수집과 수동 메모리 관리를 동시에 수행할 수 있도록 마크 및 스윕, copy참조 카운팅과 같은 다양한 가비지 수집 알고리즘을 사용할 수 있습니다.

참조 카운트는 참조 카운팅 알고리즘의 각 동적 메모리 할당과 연관됩니다. 참조 횟수는 새로운 참조가 생성되면 증가하고 참조가 삭제되면 감소합니다.

이 수가 0에 도달하면 메모리가 더 이상 사용되지 않으며 해제할 수 있음을 나타냅니다.

작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

관련 문장 - C++ Memory