環境構築・零

環境構築のその先へ

ガーベッジコレクションを導入するときのまとめ

前提、メモリリークすることがあると懸念されるとします。

それが発生したとき発動するかもしれないガーベッジコレクションを用意したいとします。

そんなときの記録。

ほとんどは参考サイト通りです。

github.com

※ ライセンス

github.com

https://www.hboehm.info/gc/license.txt

[ 2019/12/16 ]

bdwgcをcmakeでビルドする環境は、

8.0.4 は visual studio 2019対象

7.6.12はvisual stuido 2017対象

ビルドしてみてわかりました。

github.com

※ ライセンス

github.com

これもcmakeビルドする際に含まないといけないプロジェクトですが、最新でも通りました。

参考サイトの記事中にこんな記述があります

includeパスに、bdwgc/include のパスを通す。
libパスに、gcmt-dll.libの場所を追加する。
依存するライブラリに、gcmt-dll.libを追加する。
gcmt-dll.dllをコピーする。

visual studio 2017で設定してみました。

Debugとしてビルドしたbdwgcをプロジェクト内(例えばhello)に入れます。

hello/bdwgcと仮にします。

プロジェクト名で右クリック→プロパティ

C/C++全般→追加のインクルードディレクトリ→$(SolutionDir)\bdwgc\include

リンカー→全般→$(SolutionDir)\bdwgc\Debug

入力→追加の依存ファイル→(先頭に追加)gcmt-dll.lib;gcmt-lib.lib;kernel32.lib...と続きます。

bdwgc/Debug/gdmt-dll.dllを例 hello/hello/Debug(visualstudioビルド後に作成したフォルダ)にコピーします。

これで参考サイトC言語でGarvage Collectorを使う記事のソースがコンパイル&ビルドできます。

一例ですが、ガーベッジコレクションC/C++プロジェクトに導入してみませんか。

おそらくメモリリークは、回避できるはずです。

環境構築をすることでその先の知らない世界まで、道に迷わないように。

参考サイト

www.excellence-blog.com

corgi-lab.com

teratail.com

[ C++サンプル ]

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

class stand final : public gc_cleanup
{
public:
    enum {
        n = 100,
        n123 = 123,
    };
};

int main()
{
    try {
        std::cout << stand::n << "\n";
        std::cout << stand::n123 << "\n";
    }
    catch (std::exception& e)
    {
        std::cout << e.what() << std::endl;
    }
}

出力結果

100
123

Copyright © 2007-2020 Takayuki Kamiyama. All Rights Reserved.