0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++でGC(Boehm)を使う準備

Posted at

C++でGC(Boehm)を使う準備

 C++でGCを使いたい人はたくさんいると思うので下準備のメモ
オープンソースのGCといえばBoehmらしいので早速導入してみます。具体的な流れは、

  1. ソースコードのダウンロード
  2. ソリューションファイルの作成
  3. ビルドして.dllと.libを作成
  4. 使いたいプロジェクトに追加
    です。

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ができているはず。

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;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?