[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[b-free: 1084] Re^2: はじめまして



すいません。 MS Outlook97 使ったら化けたみたいです。

>Cのランタイムの話と思われるかも知れませんが、正式にスタックとして
>使うには、CPUの実レジスタに割り当てて欲しいので、やはりOSがらみの話に
>なるかと思います。(実レジスタだったら、割り込みやタスクスイッチで
>自動的に保存されると思うので)
> JavaのVMはどうやって実装しているんですかね。やはりアセンブラなんで
>しょうか。(↑こちらも低レベルはスタックマシンのようですが‥)

freeなJava VMであるkaffe0.92ではmachine.cで

/* Misc stuff */
Hjava_lang_Object* exceptionObject;

void
virtualMachine(methods* meth, slots* arg, slots* retval)
{
	Hjava_lang_Object* mobj;
	vmException mjbuf;
	accessFlags methaccflags;
	char* str;

	/* If these can be kept in registers then things will go much
	 * better.
	 */
	register bytecode* code;
	register slots* lcl;
	register slots* sp;
	register uintp pc;
	register uintp npc;
とCPUのレジスターにVMのプログラムカウンターとスタックポインターを載せていますね。
でもi386のレジスターのうち5つも割り当てていいんでしょうか?
(http://rufus.w3.org/tools/Kaffe/)

P.S.おなじスタックベースのマシーンだったらJAVAのVMのうえでForth/Mindは
走らないものでしょうか。
各OSにVMは載っているし、多くの人がVMの高速化にかかわっているので、
いったん載れば、移植性もスピードも上がると思うのですが。

----
落合 哲治  ochiai@mail.cc.tohoku.ac.jp