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

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

В частности, в документе 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, что нужно было сделать отдельным толчком в первом случае.

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

Другие вопросы по тегам