регистры по сравнению со стеками

Также может быть #include <windows.h> в .c файле, который вы пытаетесь скомпилировать.

56
задан Seki 11 June 2015 в 11:58
поделиться

7 ответов

Этому уже ответили, к определенному уровню, в FAQ VM's Попугая и ассоциированных документах: Обзор Попугая А соответствующий текст из того документа - это:

Попугай VM будет иметь архитектуру регистра, а не архитектуру стека. Это будет также иметь чрезвычайно низкоуровневые операции, более подобные Java, чем операция в секунду среднего уровня Perl и Python и т.п..

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

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

можно также хотеть считать это: Регистры по сравнению со стеками для дизайна интерпретатора, Заключающего его в кавычки немного:

нет никакого реального сомнения, легче генерировать код для стековой машины. Большинство новых студентов компилятора может сделать это. Генерация кода для машины регистра немного более жестка, если Вы не рассматриваете его как стековую машину с аккумулятором. (Который является выполнимым, хотя несколько меньше, чем идеал с точки зрения производительности) Простота предназначения, которое не является большим соглашение, по крайней мере, не для меня, частично потому что так мало людей на самом деле собирается непосредственно быть нацеленным на него - который я имею в виду, продвигаются, сколько людей Вы знаете, кто на самом деле пытается записать компилятор для чего-то, о чем кто-либо когда-либо заботился бы? Числа являются маленькими. Другая проблема там - то, что многие люди со знанием компилятора уже являются удобными машинами регистра предназначения, поскольку это - каковы все аппаратные широко использующиеся центральные процессоры.

33
ответ дан Joe Pineda 26 November 2019 в 17:17
поделиться

Реализованный в аппаратных средствах, основанная на регистре машина будет более эффективной просто, потому что существует меньше доступов к более медленной RAM. В программном обеспечении, однако, даже основанная на регистре архитектура будет, скорее всего, иметь "регистры" в RAM. Основанная на стеке машина будет столь же эффективной в этом случае.

, Кроме того, стековый VM собирается сделать намного легче записать компиляторы. Вы не должны иметь дело со стратегиями выделения регистра. У Вас есть, по существу, неограниченное количество регистров для работы с.

Обновление: я записал этот ответ, принимающий интерпретируемый VM. Это не может сохраняться для скомпилированного VM JIT. Я натыкался данная статья , который, кажется, указывает, что скомпилированный VM JIT может быть более эффективным использованием архитектуры регистра.

38
ответ дан Ferruccio 26 November 2019 в 17:17
поделиться

Одна причина создания стекового VMs состоит в том, что это фактические коды операций VM может быть меньшим и более простым (никакая потребность кодировать/декодировать операнды). Это делает сгенерированный код меньшим, и также делает код VM более простым.

12
ответ дан Mark Bessey 26 November 2019 в 17:17
поделиться

В каком количестве регистров Вы нуждаетесь?

мне, вероятно, будет нужен, по крайней мере, еще один, чем это.

7
ответ дан Chris Cudmore 26 November 2019 в 17:17
поделиться

Для меня не очевидно, что "основанная на регистре" виртуальная машина была бы "более простой к программе" или "более эффективной". Возможно, Вы думаете, что виртуальные регистры обеспечили бы ярлык во время фазы JIT-компиляции? Это, конечно, не имело бы место, так как реальный процессор может иметь больше или меньше регистров, чем VM, и те регистры могут использоваться по-разному. (Пример: значения, которые будут постепенно уменьшенными, лучше всего помещаются в регистр ECX на x86 процессорах.), Если реальная машина имеет больше регистров, чем VM, то Вы тратите впустую ресурсы, меньше и Вы ничего не получили с помощью "основанного на регистре" программирования.

3
ответ дан Jeffrey L Whitledge 26 November 2019 в 17:17
поделиться

Основанный на стеке VM's более прост, и код намного более компактен. Как пример реального мира, друг создал (приблизительно 30 лет назад) систему регистрации данных с доморощенным Forth VM на Cosmac. Forth VM равнялся 30 байты из кода машины с 2k ROM и 256 байтами RAM.

3
ответ дан ConcernedOfTunbridgeWells 26 November 2019 в 17:17
поделиться

Стек базирующийся VMs легче генерировать код для.

Регистр базирующиеся VMs легче создать внедрения FAST для, и легче генерировать очень оптимизированный код для.

Для Вашей первой попытки, я рекомендую запустить со стека базирующийся VM.

1
ответ дан Andru Luvisi 26 November 2019 в 17:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: