Почему виртуальные машины на основе регистров лучше стековых?
Почему виртуальные машины на основе регистров лучше стековых?
В частности, в документе Parrot VM разработчик объясняет преимущества машин регистрации:
[...] многие программы на языках высокого уровня состоят из вложенных вызовов функций и методов, иногда с лексическими переменными для хранения промежуточных результатов. При настройках, отличных от JIT, виртуальная машина на основе стека будет извлекать и затем многократно нажимать одни и те же операнды, в то время как виртуальная машина на основе регистров будет просто выделять нужное количество регистров и работать с ними, что может значительно сократить объем операций. и процессорное время.
но почему одни и те же операнды вставляются много раз?
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
, что нужно было сделать отдельным толчком в первом случае.
Опять же, я просто угадываю примеры, возможно, они имели в виду какой-то другой случай...