(これは非常に初心者向けの質問です)。
私は仮想マシンについて少し勉強しています。
それらの多くは、物理的または理論的なコンピューターと非常によく似た設計になっています。
たとえば、JVMは「スタックマシン」であると読みました。それが意味することは(そして、私が間違っている場合は私を修正します)、すべての「一時メモリ」をスタックに保存し、そのすべてのオペコードに対してこのスタックで操作を行うことです。
たとえば、ソースコード2 + 3
は次のようなバイトコードに変換されます。
push 2
push 3
add
私の質問はこれです:
JVMはおそらくC / C ++などを使用して記述されています。もしそうなら、なぜJVMは次のCコードを実行しません:2 + 3
..?つまり、なぜスタックが必要なのか、または物理コンピューターのように他のVMの「レジスタ」に必要なのでしょうか?
基礎となる物理CPUがこれらすべてを処理します。VMライターが、VMがプログラミングされている言語の「通常の」命令で、解釈されたバイトコードを単に実行しないのはなぜですか?
実際のハードウェアが既にこれを行っているのに、なぜVMがハードウェアをエミュレートする必要があるのですか?
繰り返しますが、初心者向けの質問です。ご協力いただきありがとうございます
printf("hi");
します。これはVMと見なされますか?「スタック」や「レジスタ」などはありません。