К. Касперски - Техника оптимизации программ, Эффективное использование памяти (1127752), страница 2
Текст из файла (страница 2)
Секреты копирования памяти или практическое применение новых команд процессоров Репйшп-Ш и Репйшп-4,..,.....,..,.,.,.,..,.. Оптимизация копирования памяти, Оптимизация заполнения (инициализации) памяти ..................... Сравнительный анализ оптимизирующих компиляторов языка Сводная таблица основных методов оптимизации...,..............,. Оптимизация константных выражений .. Замена переменных константными значениями (" размножение" констант).. Вычисление значения переменных на стадии компиляции ("свертка" констант) ..
Вычисление значений функций на стадии компиляции ("свертка" функций) .. Оптимизация алгебраических выражений.. Удаление неиспользуемых переменных Удаление копий переменных Удаление неиспользуемых присвоений., Удаление лишних присвоений .. Удаление лишних выражений. Удаление лишних вызовов функций. Выполнение алгебраических упрощений...
Оптимизация подвыражений Оптимизация арифметических операций. Сложение и вычитание.. Деление. Взятие остатка. Умножение Оптимизация ветвлений . Замена условных переходов арифметическими операциями .. ,.413 ..413 ..414 ..415 ..416 ..416 ...417 ...4! 7 ...418 ..419 ...419 .....419 ..420 ..42! ..421 ........... 42 ! Содержание ..
456 Удаление лишних условий.. Удаление заведомо ложных условий. Оптимизация звйсй ... Балансировка логического древа .. Создание таблицы переходов., Оптимизация циклов . Разворачивание циклов. Слияние циклов.. Вынесение инвариантного кода за пределы цикла ................, Замена циклов с предусловием на циклы с постусловием .....
Замена инкремента цикла на декремент. Удаление ветвлений... Оптимизация вызова функций. Оптимизация передачи аргументов. Оптимизация пролога/эпилога функций .. Оптимизация распределения переменных . Оптимизация инициализации строк . Оптимизация "мертвого" кода... Оптимизация константных условий. Определение компилятора-победителя .. Смертельная схватка: ассемблер тк компилятор Краткий экскурс в историю или ассемблер — это всегда весна .. Критерии оценки качества машинной оптимизации.....................
Методики оценки качества машинной оптимизации ........., ......... Сравнительный анализ основных компиляторов ........................... Обсуждение результатов тестирования, Наглядная демонстрация качества машинной оптимизации ........ Особое замечание о создании защитного кода на ассемблере .....
Программирование на ассемблере как особый род творчества .... Заключение Исходные тексты тестовых примеров. Приложение 1. Описание компакт-диска .......422 ...423 ...423 ......423 .....425 ...426 ...426 ...427 ........428 ........ 42 8 ...429 ...430 ...431 .. 431 ...43! ...432 .....433 ......433 ...433 ...434 ........ 434 ........ 4 35 ....... 436 ........ 4 37 ........ 439 ...440 ........ 44 3 ........ 448 ...450 ...45! Предисловие темРОИА митА!утин, ит мои мтмай п~ т.и 06 авторе' Если говорить о себе кратко — "я просто познаю окружающий мир и получаю от этого удовольствие". Компьютерами одержим еше со старших классов средней школы (или еше раньше — уже, увы, не помню). Основная специализация: разработка оптимизирующих компиляторов и операционных систем реального времени для управления производством.
Из всех языков программирования больше всего люблю ассемблер, но при разработке больших проектов предпочитаю С (реже С++). Для создания сетевых приложений прибегаю к помощи Рег! и 5ача, ну а макросы лля %огб и У!зла! Бщг!!о пишу на языке Ваяс. Эпизодически балуюсь Гопй и всякими "редкоземельными" языками наподобие Ругйоп. Впрочем, важен не сам язык, а мысли, которые этим языком выражают. Но все-таки, компьютеры — не единственное и, вероятно, даже не самое главное увлечение в моей жизни. Помимо возни с железом и блужданий в непроходимых джунглях защитного кода, я не расстаюсь с миром звезд и моих телескопов, много читаю да и пишу тоже (в последнее время как-то больше пишу, чем читаю). "Техника оптимизации программ" — зто уже седьмая по счету моя книга.
Предыдущие: "Техника и философия хакерских атак", "Техника сетевых атак", "Образ мышления — дизассемблер 1РА", "Укрощение Интернет", "Фундаментальные основы хакерства. Искусство дизассемблирования" и "Предсказание погоды по местным атмосферным признакам" были горячо одобрены читателями и неплохо расходились, несмотря на то, что ориентированы они на очень узкий круг читателей (гораздо более узкий, нежели "Техника оптимизации программ").
Помимо этого„моему перу принадлежит свыше двухсот статей, опубликованных в журналах "Программист", "Открытые системы", "Инфо-бизнес", "Компьютерра", "1 АЬ!", "еСоттегсе Мог!г!", "МоЬ!1е", "Ву!е", "Кетов! сс бегИ!се", "Азггопоту", "Домашний компьютер", "Интерфейс", "Мир Интернет", "Магия ПК", "Мегабайт", "Полный ПК", "Звездочет" и др.
' Времена меняются и мы меняемся с ними (лат.). Првдисловив Хакерские мотивы моего творчества не случайны и объясняются по-детски естественным желанием заглянуть "под капот" компьютера и малость "потыкать" его "ломом" и "молоточком", выражаясь„разумеется, фигурально — а как же иначе понять, как эта штука работает? Если людей, одержимых познанием окружающего мира, считать хакерами, то я хакер.
Адреса электронной почты для связи с автором: йрпсйргойгапппе.гв, ярясь|теса.гв. Введение в книгу О серии книг "Оптимизация" "Ну вот, — воскликнет, иной читатель, — опять серия! Да сколько же можно этому Касперски объявлять серий?! И что интересно: все серии разные! Выпущен первый том «Техники сетевых атак», но вот уже года три как нет второго.
Объявлен трехтомник «Образ мышления — дизассемблер ЮА», но до сих пор вышли только первый и третий тома книги, а второго по-прежнему нет и в обозримом будущем даже и не предвидится. Наконец, «Фундаментальные основы хакерства. Искусство дизассемблирования» — это вновь всего лишь первый том! Так не лучше ли автору сконцентрироваться на чем-нибудь одном, а не метаться по всей предметной области?" Кто-то даже сравнил меня с Кнутом — мол обещал семь томов, а выпустил только три. Но если Кнут выпустил три тома одной книги, то Касперски— по одному тому трех разных.
Ситуация осложняется тем, что мой издатель по маркетинговым ссюбражением наотрез отказался называть настоящую книгу томом, Хорошо, пусть это будет не "том", пусть это будет "первая книга серии". (Суть дела от этого все равно не меняется). Предвидя встречный вопрос читателя о причинах неполноты охвата информации (действительно, настоящая книга ограничивается исключительно одной оперативной памятью и ни слова не обмолвливается о таких важных аспектах оптимизации, как, например, планирование потока команд или векторизация вычислений), считаю своим долгом заявить, что в одной- единственной книге просто невозможно изложить все аспекты техники оптимизации и уж лучше остановиться подробно на освещении узкого круга вопросов, чем поверхностно рассказать обо всем.
К тому же, с выпуском данной книги работа над "Оптимизацией" не прекращается и на будущее запланировано как минимум пять книг этой серии. Ниже все они перечислены в предполагаемом хронологическом порядке. Первая книга — представленная вашему вниманию — посвящена оперативной памяти, оптимизации на уровне структур данных и алгоритмов их обработки. Ориентирована на прикладных и системных программистов.
На- Предисловие стоящая книга включает лишь половину запланированного материала. Остающаяся часть либо выйдет отдельной книгой, либо (что более вероятно) появится во втором издании настоящей книги. Вторая книга посвящена процессору. В ней будет рассмотрена оптимизация на уровне планирования потоков машинных команд. Книга ориентирована на системных программистов и прикладных программистов, владеющих ассемблером. Предполагаемый срок выхода: начало 2004 года. Третья книга посвящена автоматической кодогенерации.
В ней предполагается рассмотреть устройство оптимизирующих компиляторов, алгоритмы оптимизации, сравнение качества кодогенерации различных компиляторов, как "помочь" оптимизатору. Книга ориентирована на прикладных и системных программистов. Предполагаемый срок выхода: начало 2005 года. Четвертая книга посвящена подсистеме ввода/вывода компьютера.
В ней будет рассмотрена оптимизация работы с периферией, описано взаимодействие с такими устройствами, как жесткие и лазерные диски, устройства коммуникации, параллельные н последовательные порты, видеоподсистема. Книга ориентирована на прикладных и системных программистов. Предполагаемый срок выхода: начало 2006 года. Пятая книга посвящена параллельным вычислениям и суперкомпьютерам. Ориентирована на прикладных программистов.