- •Сегменты стека
- •Динамическая память (куча)
- •Объектно ориентированный подход к проектированию системных модулей на основе концепций интерфейсов и реализаций.
- •Родовые данные или данные класса, значение которых относится не к экземпляру, а к типу в целом.
- •Активные объекты
- •Активные объекты с множественными рабочими потоками
- •Посылка синхронных сообщений
- •Выборка сообщений
- •Пример полной и упрощенной выборки
- •Сообщения, определяемые приложением
- •Локальная память потока
- •Трансляторы, компиляторы и интерпретаторы.
- •Общая схема работы транслятора
- •Понятие прохода
- •Генерация кода
- •Многоадресный код с явно именуемым результатом
- •Алгоритм вычисления выражений в полной записи
- •Современные системы программирования
Алгоритм вычисления выражений в полной записи
-
Если в записи встречается операнд, он помещается в стек.
-
Если встречается унарная операция, операнд снимается с вершины стека, подвергается операции, а результат снова помещается на стек.
-
Если встречается бинарная операция, два операнда снимаются со стека, подвергаются операции и результат снова помещается на стек.
B, C, *, D, +, B, 10, *, –
польская запись B * C + D – B * 10
push B
push C
mul
push D
add
push B
push 10
mul
sub
Достоинства: компактная запись машинного кода, широкое использование одноадресных и безадресных операций, что может упрощать архитектуру аппаратуры и приводить к достижению высокого быстродействия, особенно если стек не в операционной памяти, а в регистровом пуле с достаточным объемом. Такой подход удобен для построения разного рода эмуляторов вычислительных архитектур.
Еще одним из достоинств является эффект использования кэш – памяти, т.к. с большой вероятностью гарантируется попадание в кэш при обращении ко стеку.
Оптимизация циклов
Стандартная форма организации цикла предполагает исполнение команд условного или безусловного перехода. Такие команды могут приводить к сбросу КЭШа процессора, что значит снижение быстродействия. В то же время циклы – наиболее критичные участки с точки зрения производительности. Развертывание циклов является одной из наиболее распространенных мер оптимизации, однако это увеличивает размер кода и не всегда может быть проделано.
Также применяют внесение инвариантных форм вычисления, которые не зависят от размера счетчика цикла.
Использование правил, основанных на алгебраических преобразованиях итеративных форм
Широко применяется выражение сумм арифметических и геометрических прогрессий.
Пример.
int a, b; mov eax, b
void main (void) mov ecx, a
{ imul eax, 45
for (int i = 0; i<10; i++) add ecx, eax
a += b*; mov a, ecx
}
Оптимизация для параллельного выполнения нескольких операций
Поскольку современные процессоры обладают такими возможностями оптимизации, компиляторы могут переставлять инструкции, добиваясь большой независимости в цепочках причинно – следственной связи, так что независимые участки будут выполняться параллельно.
Современные системы программирования
Всякая современная система программирования является интегрированной средой разработки. Она не является набором редакторов, компиляторов, отладчиков и справочных модулей, а связывает их функцией в рамках единой системы, так что все эти средства могут работать одновременно. (Например, изменение кода во время отладки).
Развитие систем программирование привело к широкому использованию разнообразных видов ресурсов, которые не являются программами, но используются во время их работы (например, изображения, текстовые строки, шаблоны форм и т.д.). Поэтому среда разработки фактически имеет две параллельные ветви обработки: текст программы, описание ресурсов.
