Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ 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
- в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
Другие работы
Практическое задание к теме №4 по предмету: Информационные системы в экономике
Andreas74
: 29 сентября 2021
Практическое задание к теме 4
Базы данных как основа автоматизированных информационных систем.
1. Запустите MS Access и создайте новую базу данных Фирма.
2. Создайте в режиме конструктора структуру таблицы Сотрудники, содержащую следующие поля:
• ФИО (тип данных – текстовый, размер поля – 25 символов);
• отдел (текстовый, 12 символов);
• должность (текстовый, 15 символов);
• дата рождения (дата/время, средний формат даты);
• пол (текстовый, 1 символ);
• оклад (денежный);
• семейное положение
500 руб.
Расчетно-графическая работа по инженерной графике. Взаимное пересечение тел. УГНТУ Вариант 12
Laguz
: 5 ноября 2025
Метод вспомогательных секущих плоскостей
Метод сфер
Чертеж сделан компасе 21 + дополнительно сохранён в джпг, пдф
Если есть какие-то вопросы или нужно другой вариант, пишите.
300 руб.
Контрольная работа № 2 по дисциплине "Телевидение": Осциллограмма полного цветового сигнала
Art55555
: 20 декабря 2011
СибГУТИ.
Контрольная Работа 2. Вариант 15.
Исходные данные контрольного задания №2 Цвет полос Зел 1, Зел 4, Гол 1, Гол 2 Рассчитайте и постройте осциллограмму полного цветового сигнала за одну строку при условии, что на ней расположены четыре цветные полосы – зеленая 1, зеленая 4, голубая 1, голубая 2 и одна серая. Для каждой цветной полосы определите величину яркостного сигнала, сигнала цветности, девиацию частоты, текущее значение частоты поднесущей, амплитуду поднесущей. Для полосы зеленая 1
150 руб.
Контрольная работа по предмету: Философия бизнеса
xtrail
: 21 января 2014
Задание 1
Задание
Необходимо выбрать управляющего субъекта и управляемый объект и составить обобщённую модель механизма управления, определив все её элементы:
• содержание элемента «память»,
• возможных посредников,
• объекты и процессы внешней среды,
• цели управления (конкретизация целей для модели обязательна),
• содержание программы.
Задание 2
Задание.
Придумайте ситуацию морального выбора в любой возможной сфере жизни человека (например: я буду переходить дорогу только на зелёный свет, я н
250 руб.