Schemeをつくろう(3) Boehm GC使ってみた

やっぱSchemeにはGC必要だよね。と思って、Boehm GCを使ってみた。

インストール

以下を参考に。

電気系B演習 (言語処理系演習) - Boehm GCの使い方

% ./configure
% make
% sudo make install

インストール完了。

あ、Binary Hacksを一読しておくと良いかも。

mallocかき集めてきます

mallocを一箇所に集合させます。みんなぁ〜集まれぇ〜。

void *xmalloc(int size) {
    return malloc(size);
}

void xfree(void *ptr)
{
    free(ptr);
}

集合完了です。

Boehm GCにする。

mallocGC_mallocに書き換えてっと

#include <gc.h>

void *xmalloc(int size) {
    return GC_malloc(size);
}

void xfree(void *ptr)
{
    /* free(ptr); */
}

とりあえずfreeは残しておくけど何もせず。

Makefileの修正

Makefileを修正しまっす。-lgc加えただけ。

list_test : list.c list_test.c
	gcc -g -lgc -o $@ $^

コンパイル

呪文のように唱えます。make。

% make list_test
gcc -g -lgc -o list_test list.c list_test.c
% ./list_test
(1 2 3 . 4)
(() . 1)
(symbol + string-append . Hello-Scheme-World!!)

free消したのに普通に動いてるよ!!

おぉっと

無くても普通に動くみたいだけど、メインに一言いるらしい。

#include <gc.h>

int main(void)
{
    GC_INIT();
}

完了。

まとめ

Boehm GC簡単杉

でも、今回はメモリ管理について学ぶことが目的なので、GCも実装していこうと思います。