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

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

Авторы:

Жанр: Программирование

Циклы: не входит в цикл

Формат: Полный

Всего в книге 15 страниц. У нас нет данных о годе издания книги.

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

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


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

Разработчики компиляторов с языка Си первоначально стремились к полному согласию со стандартом Кернигана и Ричи. В последствии - к уменьшению времени компиляции. Затем - к полной поддержке моделей памяти семейства микропроцессоров 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 основной памяти и многие имеют несколько мегабайт дополнительной или расширенной памяти). Следовательно, лучший способ оценки возможностей оптимизации кода компилятора Си, предназначенного для PC, - оценка скорости.

Тщательный анализ задачи и чистая программная реализация обеспечивают прочную основу для любых последующих усовершенствований, которые могут быть внесены оптимизирующим компилятором. Нельзя ожидать, что оптимизация кода компенсирует программам плохо организованную структуру задачи или выбор неподходящего алгоритма. Например, существующая технология оптимизации никак не сможет автоматически подставить алгоритм быстрой сортировки вместо записанного алгоритма пузырьковой сортировки, хотя, возможно, будет получена программа, работающая быстрее. К тому же, программисты могут просто влиять на некоторые способы оптимизации кода, такие как вычисление константных выражений, вынесение инвариантов циклов и совмещение циклов.

Сфера применения оптимизации

Термин "оптимизирующий компилятор" применяется поставщиками компиляторов в общем смысле, для обозначения компиляторов, которые обеспечивают какой-либо уровень оптимизации - от простейшего до наиболее сложного. Чтобы различать степень оптимизации, предоставляемую компиляторами, необходимо более точное определение терминов. Методы оптимизации кода могут применяться на разных уровнях синтаксических конструкций. От самого первичного уровня до наиболее укрупненного, т.е. на уровне оператора, блока, цикла, процедуры и программы. Чем выше уровень оптимизации, тем больше возможности повышения общей эффективности программного модуля. Однако затраты на применение большей степени оптимизации могут значительно увеличить время компиляции.

Оператор - это первичная синтаксическая единица в программе. Большинство компиляторов выполняют некоторую оптимизацию на этом уровне.

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


С этой книгой читают
Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.


Обработка событий в С++

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


Симуляция частичной специализации
Автор: П Кузнецов

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


MFC и OpenGL

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


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Последний дракон
Жанр: Фэнтези

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


Рука

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


Проклятье музыканта

Покупая любимому мужу старинную гитару, Анна не подозревала, что вносит в дом зло. С инструментом связано древнее проклятье, и все владельцы гитары погибают. Раулю и самой Анне грозит нешуточная опасность.


Хроника стрижки овец

Автор «Учебника Рисования» и «Красного света», Максим Кантор нарисовал новый портрет общества.Это портрет сумасшедшего – толпы на площадях, раскол на либералов и патриотов, деление на интеллигенцию и народ.Так было сто лет назад, так было двадцать лет назад. Почему опять?Спектакль или реальная история? За какую свободу мы, овцы, боремся?Максим Кантор посвятил книгу своим детям: «Вы должны знать, как это было, когда интеллигенция отказалась от своего народа. Учитесь всегда становиться на сторону слабого и никому не кланяться».Эта книга – манифест свободного сознания.