Интернет магазин китайских планшетных компьютеров



Компьютеры - Шитый код - Особенности шитого кода

23 января 2011


Оглавление:
1. Шитый код
2. Особенности шитого кода



Шитый код по сравнению с машинным сравнительно компактен. Это преимущество достигается ценой некоторого замедления. Однако здесь вступает в силу синергетический эффект — иногда компактный код меньше и заметно быстрее, чем обычный, не шитый код . Программа, достаточно компактная, чтобы полностью поместиться в оперативной памяти будет выполняться быстрее, чем программа использующая виртуальную память, что предполагает подкачку с жёсткого диска. Точно так же будет быстрее работать программа, полностью помещающаяся в кэше процессора.

Виды шитого кода

Подпрограммный код

Эта разновидность шитого кода по сути ничем не отличается от машинного кода. Это последовательность вызовов уже скомпилированных подпрограмм.

Программа имеет следующий вид:

 call Sub1;
 call Sub2;
 call Sub3;


Прямой шитый код

Этот код получается из подпрограммного, если из кода убрать вызовы call. В теле кода остаются только адреса подпрограмм. Вызов подпрограмм осуществляется с помощью простейшего адресного интерпретатора, занимающего несколько машинных команд.

 call Interpretator;
 AddrSub1;
 AddrSub2;
 ...
 AddrEXIT;
 ...
 ...
 Interpretator: машинный код, NEXT
 ...
 Sub...: машинный код, NEXT
 ...
 EXIT: машинный код, NEXT

В прямом шитом коде любое определение начинается машинным кодом. Интерпретатор должен запомнить в стеке возвратов прошлое значение счётчика инструкций, а сделать текущим свой адрес возврата. Теперь он станет новым указателем на код Форта. В ряде версий для Intel x86 используется регистр SI. При чтении данных по косвенному адресу в этом регистре, его значение меняется автоматически.

NEXT — это последовательность, используемая вместо return. Если мы завершаем Sub1, то NEXT обращается к счётчику инструкций Форта, изменяет его на размер кода и на следующем шаге уже исполняется первая машинная команда из Sub2. Скорость перехода получается не хуже, чем у пары команд return-call. Но переход NEXT в специализированном процессоре может быть выполнен как одна команда.

EXIT — восстанавливает предыдущее значение счетчика команд и переходит по соответствующему адресу.

Косвенный шитый код

Отличается от прямого шитого кода тем, что тело кода начинается не вызовом интерпретатора, а адресом, где интерпретатор находится.

 AddrInterpretator;
 AddrSub1;
 AddrSub2;
 ...
 AddrEXIT;
 ...
 ...
 Interpretator: Адрес машинного кода, машинный код, NEXT
 ...
 Sub...: Адрес машинного кода, машинный код, NEXT
 ...
 EXIT: Адрес машинного кода, машинный код, NEXT

Свёрнутый шитый код

Может, например, использоваться для сокращения размера кода, когда он имеет критическое значение. Он может быть как прямым, так и косвенным. Вместо прямых адресов подпрограмм и кодов в нем используются их свертки, которые, вообще говоря, короче этих адресов.

Так если мы знаем что код и данные выровнены относительно размеров некоторого сегмента, мы можем использовать в качестве свёрнутого адреса физический адрес, делённый на 16.

Байт-код можно рассматривать как специальный случай свёрнутого шитого кода с адресной таблицей.



Просмотров: 1870


<<< Стековый кадр
Вопросно-ответная система >>>