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 = ®s;
// ... (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)