From: matz@... (Yukihiro Matsumoto) Date: 1999-08-13T15:03:43+09:00 Subject: [ruby-list:16107] Re: Ruby 1.3.7 まつもと ゆきひろです In message "[ruby-list:16105] Re: Ruby 1.3.7" on 99/08/13, EGUCHI Osamu writes: |matz> これがないと最適化でローカル変数が消えちゃってGCに対する保護 |matz> がなくなっちゃう可能性があります。 | |『最適化でローカル変数が消えちう』ってレジスタにアサインされる |て stack の sweep 対象から洩れるっての事ですかね。 違います。RubyのGCはえぐちさんが提案した方法でレジスタもスキャ ンしてます。問題は、最適化でレジスタからも消えちゃうことがあ るってことです。たとえば、 VALUE cbase = ruby_frame->cbase; /* GC からの保護のためだけ */ ... cbase は使わない ... なんてコードだと頭の良いコンパイラだと cbaseって変数は一度も参照されてないな、消しちゃえ っていってcbaseという変数そのものを消してしまうんです。そう なると cbase って変数によって保護されるべきオブジェクトが保 護されず、知らぬ間にゴミになってしまうと。 似たようなことは char *s = RSTRING(str)->ptr .. sは使うがstrは使わない .. なんてコードでも発生します。 まつもと ゆきひろ /:|)