Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ 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
- в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
Другие работы
Гидравлика и гидравлические машины 2009 ДВГУПС Задача 1.2.5 Вариант 4
Z24
: 25 октября 2025
Закрытый резервуар заполнен разнородными жидкостями с плотностью ρ1 и ρ2. Для измерения давления р0 на свободной поверхности используется ртутный манометр. Показание манометра h3. Толщина слоя первой жидкости h1, а расстояние от плоскости раздела жидкости до уровня ртути в левом колене h2. Определить избыточное и абсолютное давление на свободной поверхности жидкости. Принять плотность ртути ρрт=13600 кг/м³ (рис. 1.2).
150 руб.
Лесные, торфяные пожары и профилактика их возникновения в Российской Федерации
evelin
: 17 марта 2014
Стихийные бедствия, пожары... По-разному можно встретить их. Растерянно, даже обречено, как веками встречали люди различные бедствия, или спокойно, с несгибаемой верой в собственные силы, с надеждой на их укрощение. Но уверенно принять вызов бедствий могут только те, кто, зная, как действовать в той или иной обстановке, примет единственно правильное решение: спасет себя, окажет помощь другим, предотвратит, насколько сможет, разрушающее действие стихийных сил.
Под стихийными бедствиями понимают п
5 руб.
Измерения на волоконно – оптических линиях передачи с помощью оптического тестера
madamm
: 25 февраля 2012
Лабораторная работа "Оптический тестер"
Лабораторная работа 2 по дисциплине «Методы и средства измерений в телекоммуникационных системах» ИЗМЕРЕНИЯ НА ВОЛОКОННО – ОПТИЧЕСКИХ ЛИНИЯХ ПЕРЕДАЧИ С ПОМОЩЬЮ ОПТИЧЕСКОГО ТЕСТЕРА.
вариант 12, N=2
1 ЦЕЛЬ РАБОТЫ
1.1 Изучить:
- теоретические основы измерений вносимых затуханий методом светопропусканий;
- особенности измерений методом светопропусканий;
1.2 Получить практические навыки измерений вносимых затуханий с помощью оптического тестера.
2
100 руб.
Лабораторная работа №1 по дисциплине: Микропроцессоры и цифровая обработка сигналов. Вариант 07
Учеба "Под ключ"
: 14 августа 2022
Лабораторная работа № 1 (часть 1)
«Вывод информации через параллельные порты»
1. Цель работы
1.1. Изучить особенности работы параллельных портов микроконтроллера.
1.2. Изучить схемы подключения светодиодов к цифровым микросхемам.
1.3. Научиться управлять светодиодами при помощи программы.
1.4. Научиться управлять цифровыми индикаторами.
1.5. Научиться загружать программы в микроконтроллер.
1.6. Изучить способы отладки программ на лабораторном стенде ЛЭСО1.
Таблица 1 – Исходные данные варианта
600 руб.