Краткие ответы по теории (1115075), страница 4
Текст из файла (страница 4)
Принципы реализации виртуальных функций.*****37. Машинно-независимая оптимизация и машинно-зависимая оптимизация. Примерыоптимизирующих преобразований.· Машинно-независимые преобразования:1. Удаление недостижимого кодаif (1) S1; else s2 => s1;2. Оптимизация линейных участков программы:a) Удаление бесполезных присваиванийa=b*c; d=b+c; a=d*c; => d=b+c; a=d*c;b) Исключение избыточных вычислений:d=d+b*c; a=d+b*c; c=d+b*c; => t=b*c; d=d+t; a=d+c; c=a;c) Свёртка объектного кода. Производится во время компиляции только длятех операций, для которых операнды уже известны.i=2+1; j=6*i+i; => i=3; j=21;d) Перестановка операций:a=2*b*3*c; => a=(2*3)*(b*c);a=(b+c)+(d+c); => a=(b+(c+(d+c)));e) Арифметические преобразования:a=b*c+b*d; => a=b*(c+d);a*1 => a; a*0 => 0; a+0 => a;f) Оптимизация вычисления логических выражений:a || b || c || d => a, если a=true;Но: a || f(b) || g(c) - сохраняется, т.к функции могут иметь побочныеэффекты.1.
Оптимизация передачи параметров в процедуры || функции.Обычно параметры передаются через стек, и на эту процедуру может тратитьсяочень много времени.a) Передача параметров через регистры. Но, помещая переменную в регистр,мы не можем использовать её адрес.В С++ есть специальный унификатор register, который ставится дляразрешения помещения параметра в регистр.b) Подстановка кода функции (вместо вызова функции в объектный код – т.к.на вызов функции тратится время).Компиляторы могут это делать не только с макросами, но и с обычнымифукциями, но только с разрешения пользователя.4.
Оптимизация циклов.a) Вынесение инвариантных вычислений из цикловfor (i=1; i<=10; i++) a[i]=b*c*a[i]; => d=b*c; for (i=1; i<=10; i++) a[i]=d*a[i];b) Замен операций с индуктивными переменными (перменными,образующими арифметическую прогрессию).- for (i=1; i<=N; i++) a[i]=i*10; =>=> t=10; i=1; while (i<=N) {a[i]=t; t=t+10; i++;}- S=10; for (i=1; i<=N; i++) {r=r+f(S); S=S+10; } =>=> S=10; m=N*10; while (S<=m) {r=r+f(S); S=S+10; }c) Слияние и развёртывание циклов.Слияние:for (i=1; i<=N; i++) for (j=1; j<=M; j++) a[i][j]=0; =>=> K=m*N; //(остаётся 1 цикл)for (i=1; i<=k; i++) a[i]=0;Развёртывание:for (i=1; i<=3; i++) a[i]=i; => a[1]=1; a[2]=2; a[3]=3;·Машинно-зависимые преобразования:1. Распределение регистров процессора.2.
Оптимизация кода для процессора, допускающая распараллеливаниевычислений. (В программе надо выделить куски кода, эти куски вычисляютсянезависимо друг от друга => их можно вычислять параллельно по разнымпроцессам.)a+b+c+d+e+f1 поток. => ((((a+b)+c)+d)+e)+f(без распараллеливания)2 потока. => ((a+b)+c)+((d+e)+f)3 потока. => (a+b)+(c+d)+(e+f)38.
Интегрированная среда разработки (ИСР).ИСР объединила в себе возможности текстовых редакторов исх. текстов программ икомандный язык компиляции. Пользователь не должен выполнять всюпоследовательность действий от порождения исходного кода программы до еговыполнения, от него также не требуется описывать makefile.
Достаточно только удобнойинтерфейсной форме указать состав исходных модулей и библиотек. Ключи,необходимые компилятору и др. техническим средствам, также задаются в видеинтерфейсных форм настройки.Содержит в себе:· Репозиторий – организованное хранилище информации, появляющейся в течениевсего “жизненного цикла” создания программного продукта.· Специальные автоматические средства разработки образов.
Например, языки 4поколения (4GL), оперирующие образами. Такие средства позволяютосуществлять разделение обработки (создания) программы между несколькимиразработчиками.· Редакторы текстов.· Средства документирования.· Средства тестирования и отладки.· Средства управления.· Средства реинжениринга (т.е.
восстановления структуры программы по коду).Примеры ИСР – TurboPascal, Delphi, Visual Studio, K-Develop.Ключевые особенности:· Интегрированность среды· Библиотека компонент· Визуальная технология разработки· Технология two-ways-tool· Поддержка работы с базами данных· «горячие клавиши»· X-курсор· Останов с редактированием, пошаговое выполнение, подсветка выполняемойстроки39.
Основные функции редактора текста в рамках ИСР. Примеры егоинтегрированности с другими компонентами ИСР.1. Подготовка текста программы.2. Многооконный интерфейс с поддержкой “буксировки” текста мышкой (функция drag& drop – перенос фрагмента мышкой).3. Интеграция с компилятором.a) Визуализация текста в выделении лексем.b) Дополнение кода (интерактивная подсказка).Например,a. ………… (А – класс) - после выполнения такой команды получим список, чтовходит в “a”.f (………… - дополнение кода или интерактивная подсказка.c) Шаблоны кода – часто используемые фрагменты программы.d) Всплывающие подсказки.e) Выделение места, в котором при компиляции обнаружена ошибка.4. Интеграция с отладчиком.a) Отображение контрольных точек останова при отладке.b) Отображение текущего значения объекта при наведении курсора наидентификатор.40.
Отладчики, их возможности. Примеры интегрированности отладчика с другимикомпонентами ИСР.· Пошаговое выполнение программы (шаг = строка, с трассировкой внутривызываемой функции или без нее)· Выполнение программы до строки, в которой в редакторе стоит курсор· Выделение выполняемой строки в данный момент· Приостановка выполнения программы· Можно запросить значение переменной· Можно заказать вычисление некоторого выражения· Можно изменить значение переменной и продолжить выполнение программы· Расставить/снять точки останова, которые визуализируются в текстовом редакторе· Вся информация должна выдаваться в терминах исходной программы41.
Редактор внешних связей, его назначение и принципы работы. Загрузчик.· Он должен разрешить межмодульные связи (для объектных файлов, порождаемыхкомпилятором при раздельной трансляции модулей, составляющих программу)· Должен связать объектные файлы, порожденные компилятором, и библиотечныефайлы, входящие в состав системы программирования (для статическисвязываемых библиотек)Загрузчик обеспечивает подготовку готовой программы к выполнению, обрабатываютресурсы, полученные с выхода компиляторов.
Модуль, выполняющийпреобразование относительных адресов в абсолютные непосредственно в моментзапуска программы на выполнение.42. Библиотеки. Основные типы библиотек.a. Библиотеки функций - определяют возможности СП в целом, чем большефункций, тем лучше. Подразделяются на 2 класса:- библиотеки для языков программирования- библиотеки для решения задач какой-то проблемной областиБиблиотеки функций представляют собой библиотеки откомпилированныхобъектных модулей.b.
Библиотеки классов – важная часть СП, базируются на объектноориентированных языках программирования. Основной недостаток – все классыдолжны быть написаны на том же языке, что и программа.- конкретные классы- абстрактные классы- шаблоны классовСуществует так называемая проблема “жирного интерфейса” – возникает желаниевключать в библиотеки больше функций, но, с другой стороны, нельзя допускать иперегрузки.Интерфейсными называются функции, входящие в public-часть класса.Библиотеки классов компилируются вместе с программой.c. Библиотеки компонент – готовые откомпилированные программные модули.В настоящее время используются следующие технологии:· CORBA – исполняемые программные компоненты из сети.
Существует еёреализация для большинства систем. Технология не зависит от используемогоязыка.· СОМ – исполняемые программные компоненты, размещённые локально (накомпьютере пользователя). Модифицированные версии СОМ – DCOM, ActivX.· Java Beans – исполняемые программные компоненты на языке Java.Нельзя путать библиотеки с пакетами прикладных программ!Пакеты прикладных программ (ППП) – специальным образом организованныепрограммные комплексы, используемые для определённой области деятельности.Программу, написанную в виде ППП, нельзя включить в свою программу, а программуиз библиотеки – можно.Для подключения статических библиотек включаются файлы, на уровне редактора связейподключаются конкретные тела.Динамически подключаемые библиотеки подключаются не при компиляции, а в процессевыполнения.
Редактор связей формирует некоторую точку вызова подключаемойбиблиотеки. Существует некоторая группа команд, вызывающая функции даннойбиблиотеки. Преимущества динамически подключаемых библиотек:- не требуется включать код часто используемых функций- несколько программ могут использовать код одной библиотеки- нет необходимости перекомпилировать свои программы при изменении текстапрограммы в библиотеке.В виде динамических библиотек оформлены системные функции, например, API.43. Критерии проектирования стандартных библиотек.1. Общезначимость содержимого2. Эффективность3. Безопасность – не должны допускать провоцирование ошибок, а, наоборот,предотвращать их4. Завершённость5.