"Генерация высококачественного кода для программ, написа" - читать интересную книгу автора (Хислей Филипп Н.)

Филипп Н.Хислей

Генерация высококачественного кода для программ, написанных на СИ

Хотя все компиляторы с языка Си предназначены для генерации наиболее
быстрых и компактных программ, качество оптимизации кода у них может быть
совершенно различное.
Разработчики компиляторов с языка Си первоначально стремились к полному
согласию со стандартом Кернигана и Ричи. В последствии - к уменьшению
времени компиляции. Затем - к полной поддержке моделей памяти семейства
микропроцессоров 80х86. Затем пытались поддерживать переносимость исходных
текстов программ путем предоставления совместимых с UNIX библиотек функций.
После этого создавали специализированные библиотеки функций для обеспечения
низкоуровневого доступа к характерным для персональных компьютеров (PC)
возможностям. За этим следовали попытки придерживаться развивающегося
стандарта ANSI C. После чего следовал возврат к началу, но с развитым
интегрированным окружением. И так далее.
Самое последнее направление в развитии компиляторов Си - оптимизация.
Это можно продемонстрировать такими сегодняшними заявлениями поставщиков
компиляторов: "Наиболее мощный оптимизирующий компилятор!" (Turbo C,
Borland); "Новые методы оптимизации генерируют самый быстрый код!" (C 5.0,
Microsoft); "Оптимизатор неутомимо ищет пути ускорения выполнения и
минимизации используемой памяти" (Optimum C, Datalight). Учитывая эту моду,
PC Tech Journal разработал тест для проверки возможностей оптимизации кода у
Си компиляторов, имеющихся на PC. Этот тест был выполнен на девяти
компиляторах: Borland Turbo C 1.5, Computer Innovations C86Plus 1.10,
Datalight Optimum-C 3.14, Lattice MS-DOS C 3.2, Manx Aztec C86 4.0, Metaware
High C 1.4, Microsoft C 5.0 и QuickC 1.0, а также WATCOM C 6.0. Эти изделия
представляют лучшие компиляторы Си, доступные на PC. Проверка показала, что
различные компиляторы применяют различные приемы оптимизации с различным
успехом. Доступны и другие компиляторы, но их характеристики значительно
хуже, чем у перечисленных. Большинство этих компиляторов описаны в
февральском номере PC Tech Journal 1988 года в статье "The State of C" (см.
"C Contenders" и "Turbo and Quick Weigh In", Marty Franz, стр. 52 и 72
соответственно).
Поскольку современные компиляторы Си близки по предоставляемым
возможностям, оптимизация остается одним важным отличием, по которому их
можно дифференцировать. Работа компилятора заключается в том, чтобы
странслировать процедурное описание задачи и эффективно отобразить его в
выделенное множество машинных команд целевого процессора. Степень
эффективности генерации компилятором машинно-уровневого кода может иметь
существенное влияние на скорость выполнения программы и ее размер.
Основная цель оптимизации - выработка более быстрого и меньшего по
размеру кода. В обычной среде компьютера, где количество доступной
оперативной памяти есть ограниченный ресурс, разделяемый несколькими
пользователями, важна оптимизация размера кода. В среде PC оптимизация
скорости имеет более высокий приоритет, поскольку PC обычно используется
одним лицом и доступен большой объем памяти (большинство PC имеют по крайней
мере 640KB основной памяти и многие имеют несколько мегабайт дополнительной
или расширенной памяти). Следовательно, лучший способ оценки возможностей