Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Шитый код - Особенности шитого кода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. Байт-код можно рассматривать как специальный случай свёрнутого шитого кода с адресной таблицей. Просмотров: 1939
|