意味的には、Dalvik VM にはメソッドごとに新しいレジスタ セットがあり、コール スタックにアクセスするための命令はありません。ただし、その実装に関しては、レジスタはメソッド呼び出しで何らかの方法で保存し、メソッドの戻り時に復元する必要があります。(Google の実装) Dalvik はどのようにこれを行いますか?
1429 次
2 に答える
5
dalvik バイトコードが参照するレジスタはマシン レジスタではありませんが、実際にはコール スタック上の場所です。メソッドを呼び出すたびに、dalvik はそのメソッドのスタック フレームに十分なメモリを割り当て、そのメソッドが必要とするすべてのレジスタを保持します。
すべての計算がスタック上の値をすぐに変更するわけではないことに注意してください。計算を行うために、vm は明らかに値をマシン レジスタにロードする必要があります。結果は、VM の裁量で、対応するスタックの場所にすぐに書き戻すことなく、後で使用するためにマシン レジスタに保持される場合があります。値は、必要に応じてコール スタックにフラッシュ バックされます (つまり、別のメソッドを呼び出すとき、さまざまな同期構造を使用するとき、または別の計算のためにレジスタが必要なときなど)。
于 2012-01-04T03:47:26.737 に答える
1
ここに dalvik のソース リポジトリがあります。実装を確認するためのウォークスルーを行うことができます。アンドロイドソース
于 2012-01-04T03:41:11.200 に答える