[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:451

From: SASADA Koichi <ko1 atdot.net>
Date: Sun, 6 Mar 2005 20:13:57 +0900
Subject: [yarv-dev:451] GC on stack (was: Re: [ANN] YARV - Yet Another RubyVM 0.2.0)

  Shiro Kawai <shiro lava.net> wrote :
    [ [yarv-dev:450] Re: [ANN] YARV - Yet Another RubyVM 0.2.0 ]
    at Sun, 06 Mar 2005 00:51:47 -1000 (HST)

 ささだです。

> stack bottomから現在のspまでをmarkする、っていうんじゃだめですか。
> ヒープに移したフレームがある場合、bottomからspの間にも未使用領域は
> あるかもしれませんが、少なくともsp以降は確実に使ってないですよね?
> 
> 穴あき未使用領域部分に関してはフレームを移す際にゼロフィルして比べてみる、
> というのも手かもしれません。mark時にそこのポインタを手繰りまくる
> よりも、バースト的に書き込んだ方が速いかも。

 まったくもってそのとおりなのですが、現状では SP を C 関数
のローカル変数にしているため、ちょっと面倒です。

 そのため、スタックフレームを深くするたびに、その最深部分を
保存しておいて、GC ではそれを参照して範囲を特定する「予定」
です。

 でも、そんなことするのなら、やっぱりそもそも sp はヒープに
保存(つまり、いつでも参照できる場所)においておくべきかもし
れませんねぇ。どうせレジスタになんて割り当てられないんだから。

http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aVM%a4%ce%ba%c7%c5%ac%b2%bd
の話は興味深いです。その辺の話で論文を見たことが無い。Java は
どうしてるんだろう。

 プロセッサアーキテクチャによってはスタックへのアクセスは速
いかもしれない(ヒープへのアクセスは遅いかもしれない)ので、

  eval_func(){
    struct{
      int pc;
      int sp;
      ...
    } regs;
    
    VM->regs = &regs;
    
    // ... (interpretation)
  }

 みたいにしておくというのもありかも。でも、あんまり意味無いかな。

-- 
// SASADA Koichi at atdot dot net
//

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       432 2005-03-04 16:02 [ko1 atdot.net       ] [ANN] YARV - Yet Another RubyVM 0.2.0   
       433 2005-03-04 18:15 ┗[aamine loveruby.net ]                                       
       434 2005-03-04 19:16  ┗[ko1 atdot.net       ]                                     
       435 2005-03-04 20:44   ┗[aamine loveruby.net ]                                   
       437 2005-03-05 20:03    ┗[ko1 atdot.net       ]                                 
       443 2005-03-06 12:52     ┗[aamine loveruby.net ]                               
       446 2005-03-06 17:06      ┣[ko1 atdot.net       ]                             
       449 2005-03-06 19:22      ┃┗[ko1 atdot.net       ]                           
       450 2005-03-06 19:51      ┗[shiro lava.net      ]                             
->     451 2005-03-06 20:13       ┗[ko1 atdot.net       ] GC on stack (was: Re: [ANN] YARV - Yet Another RubyVM 0.2.0)