Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ 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
- в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
Другие работы
Исследование статических характеристик, статических и дифференциальных параметров полевых транзисторов
Aronitue9
: 3 января 2012
Цель работы:
изучение принципа действия и основных свойств полевого транзистора с управляющим p-n переходом, его работы при усилении сигнала и в качестве регулируемого сопротивления; исследование статических и дифференциальных параметров; исследование статических вольт - амперных характеристик (входных, выходных и характеристик передачи).
1.1 Устройство и принцип работы
Полевыми транзисторами (ПТ) называются приборы, работа которых основана на модуляции сопротивления полупроводникового материал
11 руб.
Современные методы и сооружения для очистки обработки осадков (Вариант 2)
Решатель
: 30 ноября 2024
По дисциплинам «Теория процессов и сооружения для очистки сточных вод» и «Современные методы и сооружения для очистки обработки осадков» выполняется курсовая работа, состоящая из двух частей, каждая из которых выполняется в рамках данной дисциплины.
1 часть («Теория процессов и сооружения для очистки сточных вод»):
• Определить расчётный расход сточных вод, поступающих на очистные сооружения.
• Определить необходимую степень очистки сточных вод для спуска в водоём.
• Выбрать схему очистки сточн
2500 руб.
Процессы и аппараты пищевых производств УрГЭУ Задача 2.8
Z24
: 20 октября 2025
Во время опытного фильтрования водной суспензии с содержанием карбоната кальция 13,9%, при 20 ºС и избыточном давлении 3,43·104 Па, на лабораторном фильтрпрессе с F=0,1 м² и толщиной осадка 50 мм были получены следующие результаты: собрано фильтрата 2,92 дм³ через 146 с и 7,80 дм³ через 888 с. Определить константы фильтрования: К(м³/ч) и С(м³/м²).
120 руб.
Основные источники загрязнений в районе г Нижневартовска
evelin
: 17 ноября 2013
В исходной информации об источниках выбросов перед началом эксперимента указывалось, что основным загрязнителем в городе выступает автотранспорт. Анализ пространственного распределения примесей по территории подтверждает этот факт лишь частично. Если рассматривать распределение оксида углерода по территории города (рис.1), то видно, что максимальные концентрации наблюдаются в центральной части и уменьшаются к периферии. Так как максимумы содержания СО соответствуют местам пересечения основных тр
5 руб.