Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ 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
- в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта
Другие работы
Терроризм глобальная проблема мира
Lokard
: 15 марта 2014
Содержание
Введение ………………………………………………………………........................ 3
1. Причины терроризма ……………………………………………………………... 4
2. Социально-психологические характеристики террориста…………………........ 6
3. Международный терроризм………………………………………………………. 7
3.1 Полный перечень террористических организаций Мира…………………........ 8
4. Борьба с терроризмом……………………………………………………………... 13
Заключение……………………………………………………………………………. 14
Список литературы ………………………………………………………………….. 15
Введение
Терроризм сегодня - Это -
10 руб.
Плита. Задание №64. Вариант №13. Фигура 4
bublegum
: 15 августа 2021
Плита Задание 64 Вариант 14 фигура 4
Заменить вид спереди разрезом А-А.
3d модель и чертеж (все на скриншотах изображено) выполнены в компасе 3D v13, возможно открыть и выше версиях компаса.
Просьба по всем вопросам писать в Л/С. Отвечу и помогу.
85 руб.
Лабораторные работы №№1-3 по дисциплине: Алгоритмы и структуры данных. Вариант №7
IT-STUDHELP
: 17 мая 2021
Вариант № 7
Лабораторная работа №1
Тема: Линейные односвязные списки.
Цель: изучение и освоение использование структур и линейных списков.
Задание:
1. На основе материалов конспекта лекций (раздел 3) и рекомендуемой литературы изучить теоретический материал по программированию односвязного списка.
2. Сформировать однонаправленный список целых чисел заданной (см. табл. 1) длины и вывести его на экран.
3. Рассчитать заданный (см. табл. 1) показатель на основе значений элементов списка и вывести з
900 руб.
Зачет по дисциплине: Социальная психология
aleksei84
: 4 ноября 2014
Тема: Актуальность социально-психологических исследований
(на примерах конкретных исследований).
В современном обществе раскрываются многочисленные сферы приложения социально-психологических знаний. Новая социальная реальность рождает порой и необходимость новых акцентов при исследовании традиционных для данного общества проблем. Так, период экономических и политических преобразований, происходящих сегодня в России, требует особого
49 руб.