Реализована на аппаратных средствах, машина на основе регистров будет более эффективной, просто потому, что доступ к более медленной ОЗУ меньше. Однако в программном обеспечении даже на основе регистровой архитектуры, скорее всего, будут «регистры» в ОЗУ. В этом случае машина на основе стека будет столь же эффективной.
Кроме того, виртуальная машина на основе стека сделает намного проще писать компиляторы. Вам не нужно иметь дело с стратегиями распределения регистров. У вас есть, по сути, неограниченное количество регистров для работы.
Обновление: Я написал этот ответ, предполагая интерпретированную виртуальную машину. Это может не соответствовать JIT-компиляции VM. Я столкнулся с this paper, который, по-видимому, указывает, что скомпилированная виртуальная машина JIT может быть более эффективной с использованием архитектуры регистров.
Я вижу, что вы получаете, но как это отличается от стека? Стеки также могут быть слишком маленькими. – 2008-10-02 19:43:17
Видя, как виртуальные машины реализованы в программном обеспечении, размер вашего стека практически неограничен. Регистры конечны. Я могу иметь r1-r32. Я мог бы создать r33 в программном обеспечении, но какие другие классы нужно будет знать? – 2008-10-02 19:52:03
Попугай имеет бесконечное количество регистров. Вы уверены, что вам нужно еще одно? – 2010-06-01 12:47:20