Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ 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
- в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
Другие работы
Особенности формирования, распределения и использование прибыли
alfFRED
: 14 ноября 2013
Введение
Глава 1. Прибыль в условиях рыночной экономики
1.1 Экономическая сущность прибыли и ее виды
1.2 Формирование, распределение и использование прибыли
1.3 Влияние налоговой политики на прибыль
Глава 2. Анализ формирования, распределения и использования прибыли
ООО «Самородок»
2.1 Анализ деятельности предприятия по данным бухгалтерской отчетности
2.2 Технико-экономическая характеристика ООО «Самородок»
2.3 Анализ результатов финансово-хозяйственной деятельности предприятия
ООО «Са
10 руб.
Экологическое воздействие разломных зон на окружающую среду на примере мушкетовского надвига
alfFRED
: 25 сентября 2013
Разломные зоны относятся к одним из важнейших элементов структуры земной коры, Эти зоны являются наиболее мобильными, энергоемкими и самыми ослабленными ее частями. С ними связан основной тепломассоэнергопоток в недрах Земли. Эти же зоны являются основными проводниками продуктов техногенеза в недра. С энергетических позиций все эти структуры относятся к энергостоковым зонам (ЭСЗ). Исследование таких зон, проведенное в России, на Украине и других странах СНГ, показывает сложную иерархическую стру
10 руб.
Расчетная часть-Расчет электроцентробежного насоса ЭЦНМ5-80-1200-Курсовая работа-Дипломная работа-Оборудование для добычи и подготовки нефти и газа
lelya.nakonechnyy.92@mail.ru
: 17 января 2017
Расчетная часть-Расчет электроцентробежного насоса ЭЦНМ5-80-1200: Расчет на прочность вала центробежного насоса, Расчет шпоночного соединения вала-Курсовая работа-Дипломная работа-Оборудование для добычи и подготовки нефти и газа
553 руб.
Основы термодинамики и теплотехники СахГУ Задача 2 Вариант 51
Z24
: 28 января 2026
Сжатие воздуха в компрессоре происходит: а) по изотерме; б) по адиабате; в) по политропе с показателем n. Масса сжимаемого воздуха m, начальное давление р1=0,1 МПа, начальная температура t1, степень повышения давления X.
Определите величину теоретической работы и мощности компрессора, а также изменение внутренней энергии и энтропии при сжатии для всех вариантов процессов. Теплоемкость воздуха считать 0,723 кДж/(кг·К) постоянной. Постройте диаграмму процессов сжатия в координатах p-υ, на одном
250 руб.