C++ - Boehm 알고리즘 GC라이브러리 사용하기

출처

C++에서 GC(가베지컬렉션)를 사용할 수 있게 해주는 라이브러리 이다.

1. 소스 코드 다운로드

다운로드 페이지에서 다운로드.
특별한 이유가 없으면 ‘recent stable release” 버전을 다운로드.
압축을 푼다.

2. 솔루션 파일 만들기

솔루션을 만들기 위해 CMake를 사용한다.

설치한 후 명령 프롬프트를 열고 명령을 친다.
cd C:\gc-8.0.4.tar\gc-8.0.4 (프로젝트 위치로 이동)
cmake -D enable_cplusplus=ON (C++용 솔루션 파일 작성) 명령이 완료되면 gc.sln 이 만들어진다.

위 방법 이외에 CMake-GUI 툴로 솔루션을 만들 수 있다.

3. 빌드해서 .dll과 .lib를 만든다

기본 값을 빌드하면 모든 프로젝트가 컴파일된다.
생성된 gcmt-dll.dll 과 gcmt-dll.lib 을 사용한다.

4. 사용하고자 하는 프로젝트에 추가

사용하고 싶은 프로젝트를 만들고 프로젝트 (P) -> 속성(E) 을 열고 방금 라이브러리를 프로젝트에 추가한다.

  • 구성 속성 -> C/C++ 추가 에서 포함 디렉터리에 include 폴더의 경로를 추가.
    • 예: C:\gc-8.0.4.tar\gc-8.0.4\include
  • 구성 속성 -> 링커 추가 라이브러리 디렉토리에 gcmt-dll.lib 이 들어 있는 디렉토리를 추가.
  • 구성 속성 -> 링커 -> 입력 추가 종속성에 gcmt-dll.lib을 추가.
  • 실행 시 gcmt-dll.dll 이 필요하기 때문에 빌드한 exe가 있는 장소 등으로 이동하여 둔다.

5. 샘플 코드

main.cpp

#include <iostream>
#include <gc_cpp.h>

int ccnt;
int dcnt;

class Hoge : public gc_cleanup
{
public:
  Hoge() {
   ccnt++;
  }
  ~Hoge() {
    dcnt++;
  }
};

int main()
{
  for (int i = 0; i < 100000; i++) {
    Hoge *h = new Hoge();
  }
  std::cout<<"생성자가호출된 횟수: "<<ccnt<<std::endl;
  std::cout<<"소멸자 호출된 횟수: "<<dcnt<<std::endl;
  return 0;
}  

이 글은 2020-03-12에 작성되었습니다.