Почему виртуальные машины на основе регистров лучше, чем стековые?

Почему виртуальные машины на основе регистров лучше, чем стековые?

в частности, в документ Parrot VM, конструктор объясняет преимущества машин регистра:

[... многие программы на языках высокого уровня состоят из вложенных вызовов функций и методов, иногда с лексических переменных для хранения промежуточных результатов. В настройках non-JIT VM на основе стека будет появляться, а затем нажимать одни и те же операнды много раз, в то время как регистровая виртуальная машина просто выделит нужное количество регистров и будет работать с ними, что может значительно сократить количество операций и время процессора.

но почему одни и те же операнды нажимаются много раз?

1 ответов


похоже, что они описывают виртуальную машину, которая выполняет код, как описано в языковом дизайне, байт-код-байт-код без компиляции или оптимизации. В таком случае это правда. Подумайте о том, что код делает что-то вроде этого, например:

x = first(a,b,c)
y = second(a,b,c)
third(y,x)

С системой на основе регистров вы можете просто поместить аргументы в любую позицию, в которой они ожидаются (если регистры могут использоваться для передачи аргументов). Если все регистры являются "глобальными", а не для каждой функции (или, по крайней мере, восстановлены при появлении стека вызовов) вам может не понадобиться ничего делать между вызовом first и second.

если у вас есть виртуальная машина на основе стека, вы получите что-то вроде (Надеюсь, у вас есть swap):

push a
push b
push c
call first
push a # pushing same arguments again
push b
push c
call second
swap
call third

и если подсчитать математическое выражение, которое использует те же переменные, вам может понадобиться сделать что-то вроде этого:

push a
push b
add
push a
push c
add
add

вместо (предполагая, что есть регистры a, b, c, и вы можете уничтожить содержимое b и c):

add b, a
add c, a
add b, c # result in b

это позволяет избежать восстановления a, что необходимо было сделать в отдельном толчке в первом случае.

опять же, я просто предполагаю примеры, может быть, они имели в виду какой-то другой случай...