Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ Builder
Состав работы
|
|
|
|
Работа представляет собой zip архив с файлами (распаковать онлайн), которые открываются в программах:
- Microsoft Word
Описание
Вместо вступления сразу приведу пример. Полная сборка (build) проекта, содержащего около 170 cpp-модулей, при использовании предкомпилированных заголовков происходит за 811 секунд, при этом число обработанных компилятором строк составляет 1,808,780. При компиляции того же проекта без использования предкомпилированных заголовков, время сборки составляет 2399 секунд, а число строк, обработанных компилятором - 45,261,820. Впечатляет, не так ли? Плата за это ускорение, в принципе не велика - предкомпилированный образ, размер которого около 40 Мб.
При компиляции исходных текстов, компилятор должен обработать все *.cpp файлы проекта и все включенные в них *.h - файлы. При этом обрабатываются как пользовательские заголовочные файлы, так и стандартные, такие как vcl.h или Word2k.h. Количество кода, находящегося в стандартных заголовках может быть очень большим, например размер файла Word2k.h превышает 5 Мб, в нем больше 130 000 строк кода.
Так как содержимое стандартных заголовков не изменяется, то их компиляция при каждой сборке проекта является напрасной тратой времени. Предкомпилированные заголовки помогают решить эту проблему - стандартные файлы компилируются один раз, а затем используется скомпилированный двоичный образ.
Принцип действия предкомпилированных заголовков
Для управления предкомпилированными предназначена директива компилятора #pragma hdrstop. Все заголовочные файлы, включенные до этой директивы, помещаются в один образ, например:
#include <vcl.h>
#include <string>
#pragma hdrstop
Такая последовательность создаст образ, содержащий скомпилированные vcl.h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков - даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl.h, то для этого cpp-файла будет создан новый образ.
Таким образом, для повторного использования предкомпилированного заголовка необходимо выполнение двух условий:
- состав включенный файлов до директивы hdrstop должен быть тем же
- последовательность включения файлов до директивы hdrstop должна быть той же
Сократить затраты на компиляцию стандартных заголовков до минимума можно только в том случае, если скомпилировать один образ, содержащий все стандартные заголовки, необходимые для проекта. Для этого нужно, чтобы:
- ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop
- в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
При компиляции исходных текстов, компилятор должен обработать все *.cpp файлы проекта и все включенные в них *.h - файлы. При этом обрабатываются как пользовательские заголовочные файлы, так и стандартные, такие как vcl.h или Word2k.h. Количество кода, находящегося в стандартных заголовках может быть очень большим, например размер файла Word2k.h превышает 5 Мб, в нем больше 130 000 строк кода.
Так как содержимое стандартных заголовков не изменяется, то их компиляция при каждой сборке проекта является напрасной тратой времени. Предкомпилированные заголовки помогают решить эту проблему - стандартные файлы компилируются один раз, а затем используется скомпилированный двоичный образ.
Принцип действия предкомпилированных заголовков
Для управления предкомпилированными предназначена директива компилятора #pragma hdrstop. Все заголовочные файлы, включенные до этой директивы, помещаются в один образ, например:
#include <vcl.h>
#include <string>
#pragma hdrstop
Такая последовательность создаст образ, содержащий скомпилированные vcl.h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков - даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl.h, то для этого cpp-файла будет создан новый образ.
Таким образом, для повторного использования предкомпилированного заголовка необходимо выполнение двух условий:
- состав включенный файлов до директивы hdrstop должен быть тем же
- последовательность включения файлов до директивы hdrstop должна быть той же
Сократить затраты на компиляцию стандартных заголовков до минимума можно только в том случае, если скомпилировать один образ, содержащий все стандартные заголовки, необходимые для проекта. Для этого нужно, чтобы:
- ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop
- в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
Другие работы
Анализ эффективности технологии WebAssembly
holm4enko87
: 3 августа 2017
Выпускная квалификационная работа по теме «Анализ эффективности технологии WebAssembly»
Объём работы 33 страницы, на которых размещены 10 рисунков и 3 таблицы. При написании работы использовалось 10 источника.
Ключевые слова: WebAssembly, Emscripten, производительность.
Целью бакалаврской работы было реализовать тесты производительности и сравнить результаты их работы на различных браузерах.
В рамках дипломного проекта была создана и настроена среда для разработки WebAssembly. Был выполнен сравн
1200 руб.
Прибыль предприятия и пути ее увеличения используя финансовую отчетность ОАО Белорусские продукты
Elfa254
: 25 октября 2013
Введение 3
1.Прибыль в системе показателей хозяйственной деятельности
предприятия 5
2.Содержание и задачи анализа прибыли, источники информации 13
3.Анализ формирования прибыли и факторов её изменения 17
4. Анализ распределения прибыли по основном направлениям 27
5. Резервы роста прибыли и совершенствования системы
её распределения 29
Заключение 33
Список использованных источников 35
Приложение А 37
Приложение Б 39
ВВЕДЕНИЕ
Рыночная экономика определяет конкретные требования к систем
10 руб.
Проблемы взаимоотношений полов и детства. Сравнительный анализ китайской и японской культур
Slolka
: 10 октября 2013
Часть 1. Проблемы взаимоотношений полов и детства
Часть 2. Сравнительный анализ китайской и японской культур
Источники информации
Проблемы взаимоотношений полов и детства
При описании характера взаимоотношений между ребенком и его родителями необходимо также принимать во внимание тот тип общества, в котором развивается ребенок.
Описывая взросление на Самоа, известный американский антрополог М.Мид отмечала, что система социальных отношений на Самоа была построена таким образом, чтобы по во
Контрольная работа по дисциплине: Технологии транспортных сетей. Вариант 5
Учеба "Под ключ"
: 19 августа 2022
Задание
Для заданной топологии сети определить в каждом пункте тип мультиплексора, уровень STM и оптический интерфейс на участках сети, если передается следующая информация:
Таблица 1 - Расстояния между пунктами в км
Вариант: 5
АБ: 55
БВ: 37
ВГ: 21
ГД: 78
ДА: -
Таблица 2
Последняя цифра пароля: 5
Направления Е1 Е3 100BaseX
(FE) 1000BaseX
(GE)
А-Б 22 3 3 -
Б-В 77 2 2 1
А-Г 43 1 3 -
В-Д 21 3 2 -
Топология сети: Линейная
800 руб.