恥ずかしながら、今までCでGCが出来るとは思っていませんでした。
いや、出来るだろうなぁという直感はありましたが、「調べよう」というところまではココロが動きませんでした。
まぁ、所詮「正しいプログラムを書けば」GCなんていらんのです。
あんなの飾りです。偉い人にはそれがわからんのですよ。
でも、私は神様では無いので、正しいプログラムが書ける自信がないので、やっぱりGC使ってみようと思い立ちました。
幸い、最近Cでプログラムを書く機会を頂きまして(いや、Pythonがあまりにも遅すぎて、話にならんのでCで書き始めたわけですが)、もちろんmallocなんかを使い倒して・・・・
で、肝心のGCですが、なんでも、「Boehm GC」というGCがあるそうで。いや、恥ずかしながら、勉強不足でした。もう、20年近く前からあるようです・・・・
まぁ、気を取り直して
apt-get -y install libgc-dev
あ。最近Linux多いんですよ。Debian系です。armbianって言います。もう、どっぷりです。
まだまだ FreeBSD も使ってますけど、/usr/portsとか忘れかけてます。
久しぶりにmake install cleanとかしたら、「“t”なんてしらねー」って怒られて凹んでます。
で、GCが簡単にインストール出来て、
gcc -lgc hogehoge.c
とかすれば簡単にコンパイル出来ます。
#include <gc.h>
が必須で、
GC_MALLOC
をmallocの代わりに使えばおっけ。freeは消しましょう。消さないとプログラム落ちます。
簡単に実装出来ました。これで、「メモリ管理の苦労からも開放される!?」と喜び勇んでプログラムを実行してみました。。。。。。
結論:GC辞めました。
いやね、GCってメモリ管理に結構コストかかるんですね。CPUが10%上がりました。
そんなに余裕のあるマシンじゃないんだよ。リソース大事なんだよ。
アプリとか、ちゃんとしたサーバのプログラムなんかにはとても良いのではないでしょうか。
(さっぱりフォローになってませんが)
今回は、かなり高速に動いているシステムのメモリ管理だったので、まぁ、そらそうですよね。
といことで、ちょっと実験していい気分になってみました。
p.s.
でも、私は、GC_MALLOCという大文字だけで構成されている関数に違和感を感じずにはいられません。信じるか信じないかはアナタ次第です。