Boehm GC限定ではないのですが、C/C++において確保されたメモリが必要ないと判断できるときはどういうときでしょうか?
COMのように参照カウントで addref/release されるなら分かるのですが、
普通の考えて、必要ないと分かるはずがないような気がします。
char *p = (char *)GC_malloc(100);
char *ret = p;
return ret;
としても、pのところで確保した領域がまだ使用されているかどうか分かるものなのでしょうか?
GCの利点にfreeしなくても自動的に回収してくれる。というのがあると思うのですが、どう回収すべきものを見つけているのか想像がつかなく、ほんとうに回収されているのか、それともまだ必要なのに回収されちゃっているのか不安になったので投稿させていただきました。
"Boehm GC"でググって最初に出てくるページをざっと見ただけですが
スタックなどの領域を走査し、GC_*で確保したアドレス値があったら
まだ使われていると判断。なかったら回収。
という仕組みらしいです。
偶然アドレス値と一致する関係ないデータがあった場合回収漏れが起きるが
確率的に問題ない、らしい。
ツイート | ![]() |