С builder как ускорить компиляцию с помощью предкомпилированных заголовков


Содержание

как ускорить компиляцию (сборку) С++ программы

Недавно для одного проекта (C++ Builder), который мне приходится сопроваждать,
ведущим программером была произведена настройка настройка прекомпилед хедеров, и вообще наведён порядок в зависимостях .h файлов. В итоге время компиляции с 5 минут сократилось до 60 секунд. ( http://people.overclockers.ru/seb/record3 )
На днях ещё подрубили плагин
http://andy.jgknet.de/cpp/index.php?page=idecompilerspeedfix
время пересборки сократилось до 17-30 секунд. Правда плагин работает не стабильно, необходимо что бы для каждого .cpp & h существовала форма ЛИБО перед компиляцией закрывайте эти файлы в среде. :)

Но тут знакомый Delphi девелопер намекнул, что у него у друзей, работающих в среде гейм-дева время сборки 20мб .exe -ника составляет 1минуту. Жаль он не доконца уяснил методику, используемую в конторе.

Единственное, что я добился от него это следущий пример кода:

// в .h файлах
#defin SOME_H
// ! без защиты повторного включения

#ifndef SOME_H
#includ «some.h»
#endif

#ifndef SOME2_H
#include «some2_H
#endif

Может кто использует данный (или похожий) приём? Объсяните плиз поподробней, в чём фича?

Я так понял, что за счёт выноса проверки на повторное включение заголовка в .cpp файл,
препроцессору (или компилятору, если они совмещены) не надо каждый раз обращаться к диску и открывать .h файл (что довольно долгая операция, ведь скорость винта сильно меньше скорости процессора и памяти). и не надо просматривать этот файл до конца ища #enif защиты.
(Правда для VC++ есть удобная прагма #pragma once, имеет ли она тот же эффект?).

И как эта метода может с выгодой использоваться с прекомпилед хедерами?

Скорее всего он выключил опцию бэкграунд компиляции. Что и дало соответствующее ускорение
компиляции.
Плюс к тому же если повыкидывать из проекта ненужные вестчи, что бы компилер не проверял, что
они используются или нет.
А очень хорошо влияет на скорость компиляции производительность процессора. :-) его загруженность
другими операциями :-)

Попробуйте побольше «говнища» в PCH выкинуть.
буст конечно туда не пойдет как и многие другие веши, но чем больше хидеров в pch тем быстрее компил идет.
Другое дело что кидать надо файлы довольно таки часто используемые, а то будет pch метров на 100 и фиг чего он ускорит :) :)

чего исчо. incrimental link? ляляля тополя вроде все

riderv
Прочитал как работает Bcc32Pch IDE Plugin
идиотизм :) :) :)
.NET тоже чемто похожим страдала, 2005 вижуал работает идеально.
Может у него тама в нитри супер пупер кеш сидит но «понимает» чего читать а чего читать не надо — эт он умеет быстро

  • r >#4
    17:17, 11 июля 2006

Значит фишку на подобе

#ifndef SOME_H
#includ «some.h»
#endif

ни кому не знакома.

Kashey, кстати, а boost почему в pch не влезет? Из-за инициализации данные в хедерах?

riderv
эта фишка типа защищает от того что файлы открывать даже не будет

man ccache
man distcc
:)

nbkolchin
с хорошим мейкфайлом ccache не нужен, afaik
а distcc это отличное средство за DDoS’ить машину :)). Но для компиляции полезно

тип про c++ builder спрашует, а вы ему distcc..

попробуй еще forward declarations, немного, но поможет

Pimpl тоже дает заметное ускорение.

riderv
Буст не гарантирует работу если сидит в pch, уж больно он затемплейтен
Зависит не от буста а от компилера

а так самый эфективный способ ускорить компиляцию — разбить прогу на несколько модулей и линковать или либами или дилками.
Обычно при изменении кода только 20% кода потребует обновление — максимум

xplozive
IncrediBuild — существунную разницу заметишь только если машин в офисе много + линковка тоже может много занимать времени.

  • r >#14
    16:47, 12 июля 2006

Cool Ace
Я так и понял. Если файл уже включен, то даже не будет открываться, если открывание относительно долгий процесс, то должен быть прирост.


waker
Да не обязательно для билдера. Билдер вообще не любит что бы меняли #include, особенно в .h.
Меня просто заинтересовала что за фишка, со сборкой (на одной машине а не распредельной),
позволяющая полный ребилд 20mb .exe сделать за 1 минуту на P4 3GHz.

А форавард декларации и pimpl я конечно юзаю. Хороший прирост, если меняешь только реализацию.
Когда я только пришёл в контору и пока не навели порядок в заголовках, я, когда писал свои модули,
старался вообще не юзать #include. А просто в чужом модуле писал Си функцию передающую вызов объекту,
а в своём модуле делал её форвард декларацию.

А IncrediBuild для дома не годится :)

И как тут дельфистам не позавидовать, млин. Параллельный проект на дельфи ребята делают. в попыхах.
Не нормального планирования, ни проектирования.. такие бывают дурацкие перекрётсные ссылки на модули.
И это ещё неплохо работает, и компилится очень быстро.

И почему нельзя было реализовать обработку интерфейса автоматически, как в дельфи:
раз прочитал компилятор .h файл, обработал, сохранил .pch или ещё как,
если где надо при компиляции .cpp, подкачал .pch. А тож ведь это для каждого .cpp (если без прекомпиледов), компилятор будет КАЖДЫЙ раз парсинг делать? Да ещё если изменился интерфейс одного класса в .h файле, то все .cpp, даже которые не зависят от этого класса, а зависят от интерфейса другого класса в этом же .h, будут пересобраны!!
Надо же и зависимости отслеживать.
(Правда на счёт VS 2005 не уверен, уж очень быстро пересобирает, даже если .h меняешь. Но на больших проектах не пробовал).

предкомпилированные заголовки

как это можно обойти?

может есть возможность проверить включена эта опция или нет, что то типа

вот начало файлов:

13.03.2014, 17:14

Предкомпилированные заголовки Visual Studio 2010
Здравствуйте. Веду большой проект в Visual Studio 2010 и в последнее время появилась необходимость.

Как навсегда отключить предкомпилированные заголовки (VS2013)?
Установил сегодня себе сей продукт от майкросуфта. Единственные две вещи, которые не нравятся- то.

Какие заголовки нужно подключить для работы с векторами?
подскажите пожалуйста!какие заголовки нужно подключить для работы с векторами на шестой.

HTTP заголовки. Как увидеть реальные принятые заголовки ?
файл php содержит readfile(блабла) больше ни чего! Если смотреть заголовки через Файрфорк или.

Заголовки
Обязательно ли использовать на странице заголовки

Как ускорить компиляцию программы на C++ в среде разработки Code::Blocks? [закрыт]

Использую среду разработки Code::Blocks для изучения программирования на C++, при этом даже небольшие программы компилируются достаточно долго (10-15 секунд). В основном это происходит при использовании циклов for

Закрыт по причине того, что вопрос слишком общий участниками Abyx, pavel, Иван Пшеницын, user194374, aleksandr barakin 18 авг ’16 в 6:14 .

Пожалуйста, исправьте вопрос так, чтобы он описывал конкретную проблему с достаточной детализацией для определения адекватного ответа. Не задавайте сразу несколько вопросов. См. «Как задать хороший вопрос?» для прояснения ситуации. Если вопрос можно переформулировать согласно правилам, изложенным в справке, отредактируйте его.

1 ответ 1

покажите пример программы, сообщите конфигурацию своего компьютера (память, процессор, ос, ssd или hdd), покажите настройки сборки

может вы в 1 ядро собираете (IDE СLion, кстати, автоматически использует передает компилятору все ядра)

может быть у вас оптимизация включена максимальная, что всегда тормозит билды.

может быть в Code::Blocks есть настройка использовать прекомпилированные заголовки (IDE DevShed C++ и его потомки компилируют их при установке, как насчет CB — не знаю)

может быть у вас неправильно настроена система сборки и вместо того, чтобы компилировать только изменившиеся файлы, вы компилируете вообще все файлы подряд.

идея насчет антивируса, кстати, неплоха, вполне можно включить каталоги с include-файлами, компилятором и ide в список исключений

IDE тут не при чем, code::blocks на виндоус использует mingw-версию gcc, если мне память не изменяет (как почти все свободные IDE). Скорость его работы в винде мне не очень известна, но можно поискать.

Вы можете попробовать подключить бесплатную версию компилятора от Microsoft, или подключить clang, который обычно компилирует быстрее gcc

Если вы на винде, можете попробовать разобраться сами, с помощью, например Process Monitor. Увидите, что делает компилятор и в какие моменты что тормозит.

Статья: Как ускорить компиляцию с помощью предкомпилированных заголовков в С Builder

Precompiled headers can dramatically increase compilation speeds .

С++ Builder Language Guide

Вместо вступления сразу приведу пример. Полная сборка (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. Все заголовочные файлы, включенные до этой директивы, помещаются в один образ, например:

Такая последовательность создаст образ, содержащий скомпилированные vcl.h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков — даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl.h, то для этого cpp-файла будет создан новый образ.

Таким образом, для повторного использования предкомпилированного заголовка необходимо выполнение двух условий:

— состав включенный файлов до директивы hdrstop должен быть тем же

— последовательность включения файлов до директивы hdrstop должна быть той же

Сократить затраты на компиляцию стандартных заголовков до минимума можно только в том случае, если скомпилировать один образ, содержащий все стандартные заголовки, необходимые для проекта. Для этого нужно, чтобы:

— ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop

— в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта

Выполнить эти условия достаточно просто, для этого в начало каждого cpp-файла необходимо поместить следующие строки:

где pch.h — файл, содержащий включения всех стандартных заголовков:

Как ускорить компиляцию с помощью предкомпилированных заголовков в С Builder

Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ Builder

Precompiled headers can dramatically increase compilation speeds…

С++ Builder Language Guide

Вместо вступления сразу приведу пример. Полная сборка (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. Все заголовочные файлы, включенные до этой директивы, помещаются в один образ, например:

Илон Маск рекомендует:  Double - Тип Delphi

Такая последовательность создаст образ, содержащий скомпилированные vcl. h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков – даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl. h, то для этого cpp-файла будет создан новый образ.

Таким образом, для повторного использования предкомпилированного заголовка необходимо выполнение двух условий:

– состав включенный файлов до директивы hdrstop должен быть тем же

– последовательность включения файлов до директивы hdrstop должна быть той же

Сократить затраты на компиляцию стандартных заголовков до минимума можно только в том случае, если скомпилировать один образ, содержащий все стандартные заголовки, необходимые для проекта. Для этого нужно, чтобы:

– ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop

– в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта

Выполнить эти условия достаточно просто, для этого в начало каждого cpp-файла необходимо поместить следующие строки:

Где pch. h – файл, содержащий включения всех стандартных заголовков:

Полный текст моей версии этого файла приведен в конце статьи. На h-файлы, входящие в предкомпилированный образ, накладывается ограничение – в них не должно быть инициализированных данных, например, в math. hpp есть строки:

Static const Extended NaN = 0.0 / 0.0;


Static const Extended Infinity = 1.0 / 0.0;

Из-за наличия этих констант включить math. hpp в файл pch. h нельзя.

Кстати, С++ Builder при добавлении новых модулей в проект реализует описанную стратегию управления предкомпилированными заголовками. Например, при создании нового приложения, файл Unit1.cpp будет таким:

Если посмотреть на текст vcl. h, то можно увидеть, что он является оболочкой для включения большого числа других стандартных заголовочных файлов.

Управлять составом включаемых в vcl. h заголовков можно с помощью специальных символов (INC_VCLDB_HEADERS, INC_VCLEXT_HEADERS и др.). В моей версии pch. h эти символы определяются с помощью #define до включения vcl. h, что приводит к увеличению числа включаемых файлов.

Как в существующем проекте перейти к использованию предкомпилированных заголовков

Даже в большом проекте перейти к использованию предкомпилированных заголовков достаточно просто.

В свойствах проекта нужно включить кэширование предкомпилированных заголовков и рекомендуется указать “персональный” файл, в котором будет храниться образ предкомпилированных заголовков: Project – Options – закладка Compiler, группа “Pre-compiled headers”. Тут должно быть выбрано “Cache pre-compiled headers”, а в поле “File Name” нужно ввести “pch. csm”. При такой настройке образ с предкомпилированными заголовками будет находится в папке с проектом, в файле pch. csm.

После этого в начало каждого cpp-модуля необходимо вставить 2 строки:

Все ранее включенные заголовочные файлы остаются на своих местах, их удалять не надо. Например:

#include “pch. h” // включает vcl. h, string и т. д.

Так как во всех стандартных заголовках применяются стражи повторного включения, то повторное их упоминание не влечет за собой повторного включения.

В принципе, при использовании pch. h, техническая потребность во включении стандартных заголовков исчезает. Однако, полезно все же указывать все необходимые для каждого конкретного модуля заголовки ниже директивы #pragma hdrstop. Во-первых, это в некоторой степени документирует модуль – по включаемым файлам можно судить, какими возможностями пользуется этот модуль. Во-вторых, это облегчает повторное использование модуля в других проектах, в которых либо не используется pch. h, либо его содержимое может быть другим.

Теоретически можно еще больше повысить эффективность компиляции, если включить в pch. h не только стандартные, но и все пользовательские заголовочные файлы. Практически, так как пользовательские заголовки меняются достаточно часто, это может повлечь за собой частую перекомпиляцию pch. h, что негативно скажется на времени компиляции. Кроме того, пользовательские заголовки обычно не бывают очень большими и компилируются очень быстро. Поэтому включать их pch. h не целесообразно.

Как проверить, что предкомпилированные заголовки используются эффективно

При добавлении в проект новых файлов нужно не забывать включать в них pch. h, иначе для них не будет использован общий предкомпилированный образ. Такая же ситуация может возникнуть, если в каком-то модуле включаются стандартные заголовки, которые не вошли в pch. h. Для того, чтобы отследить такие файлы, есть несколько способов:

– визуальное наблюдение за процессом компиляции. Обычно, число строк компилируемых в одном файле не должно превышать 10000-15000 строк

– если для проекта выбран индивидуальный файл для хранения образа предкомпилированных заголовков и этот файл называется pch. csm, то нужно обратить внимание на наличие вспомогательных файлов с именами pch.#00, pch.#01 и т. д. Если для всех файлов проекта используется один и тот же предкомпилированный образ, то вспомогательный файл должен быть только один – pch.#00. Если таких файлов больше, это значит что для каких-то cpp-модулей создаются дополнительные образы.

/* Все, что подключается предыдущими 3-мя строчками

// Core (minimal) Delphi RTL headers

// Core (minimal) VCL headers

// VCL Database related headers

// Full set of VCL headers

//нестандартные компоненты RxLib и EhLib

#include “CURREDIT. hpp”

#include “RXSpin. hpp”

#include “RxCalc. hpp”

#include “RxCombos. hpp”

#include “APPUTILS. hpp”

#include “RXDBCtrl. hpp”

#include “Placemnt. hpp”

#include “DBGridEh. hpp”

Интересные материалы:


Разработка многопоточных Windows-приложений в среде Borland C BuilderМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра АСУ Отчет К индивидуальному домашнему заданию По ТП На тему: “Разработка многопоточных W indows-приложений В среде Borland C ++ Builder “ Вариант №7 Выполнил студент группы ИУС-04б Ващилко Валентин Проверили Землянская С. Ю. Петров А. В. Донецк 2007 Цель работы: Изучение способов создания и управления потоками в программах, разрабатываемых в.

Рубрикация. Классификация заголовковМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение Высшего профессионального образования “ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ” Филологический факультет Кафедра издательского дела и редактирования Курсовая работа на тему: “Рубрикация. Классификация заголовков” Тюмень 2010 Заголовочный комплекс (заголовочный ансамбль) – это подсистема внутри текстовой системы, состоящая из элементов, находящихся вне текста. Заголовочный ансамбль включает в себя: заголовки, рубрики, подзаголовки, вводки.

Языково-стилистические особенности заголовков в газетеЯзыково-стилистические особенности заголовков в газете Содержание 1. Роль и значение заголовков периодических изданий 2. Стилистические особенности газетных заголовков Литература 1. Роль и значение заголовков периодических издани й В газете заголовок занимает самую сильную, акцентируемую позицию. Это то, на что читатель сразу обращает внимание. Являясь составной частью газеты, заголовок выполняет следующие языковые функции: информативную (передает информацию о тексте), прагматическую (оказывает воздействие.

Язык заголовков английских газетПЛАН: ВВЕДЕНИЕ…………………………………………………… …стр. 2-3 ГЛАВА 1. Англоязычные газеты………………………………….. 1.1. Англоязычные газеты, издаваемые в России………………стр.-4 1.2. Речевой стиль современной английской газеты………….стр.5-8 ГЛАВА 2. Газетные заголовки……………………………………….. 2.1. Построение газетных заголовков. …………………………стр.9-10. 2.2. Особенности перевода газетных заголовков………………стр.10-13 2.3. Стилистические особенности газетных заголовков………стр.13-17 ЗАКЛЮЧЕНИЕ………………………………………………………… Список литературы…………………………………………………… ВВЕДЕНИЕ Актуальность настоящего исследования обусловлена обращением к новейшим парадигмам исследования смысла на стыке лингвистики, теории массовой коммуникации, лингвокультурологии.

Стилистика газетных заголовковСОДЕРЖАНИЕ Введение * Глава 1. Стилистические особенности газетного текста * Глава 2. Специфика заголовков в различных газетных текстах * Заключение * Список литературы * Введение Актуальность темы исследования. Эффективность газетного текста во многом определяется его заглавием, ибо известно, что с помощью умело составленного заголовка часто легче убедить читателя, чем с помощью резкого памфлета. Кроме того, “исследования психологов показывают, что около.

Решение математической задачи с помощью математических исследований и помощью специального офисногоСодержание Введение 1. Условие задачи 2. Математическая модель задачи 3. Аналитическое исследование функции. Нахождение критических точек 4. Построение графика искомой функции средствами MSExcel Выводы Используемая литература Введение В данной работе требуется решить математическую задачу двумя способами, один – это привычный для нас вариант, с помощью математических исследований, а второй – с помощью специального офисного приложения MSExcel. Для этого нам необходимо.

Аутентификация пользователей с помощью ASPАутентификация пользователей с помощью ASP Христофоров Юрий В этой статье будет рассказано, как зарегистрированным пользователям разрешить доступ к некой секретной asp странице, а посторонним нет. Постановка задачи: Есть база данных Access 97, в которой хранятся имена зарегистрированных пользователей и их пароли, и есть некая секретная страница, доступ к которой должны иметь только пользователи, занесенные в БД. Пароли в БД требуется.

Шифрование файлов в NTFS с помощью системы EFSМосковский Государственный Технический УниверситетИмени Н. Э. Баумана Кафедра ИУ-5 ‘Шифрование файлов в NTFS С помощью системы EFS’ Выполнил: Студент группы ИУ5-73 Кононов П. В. Дата:__/__/____ Подпись:__________ Москва, 2010 Содержание Содержание. 2 Введение. 3 Механизм EFS. 4 Технология шифрования. 4 Взаимодействие с пользователем.. 4 Восстановление данных. 5 Немного теории. 5 Реализация в Windows 2000. 7 Заключение. 9 Список используемой литературы.. 10.

Реализация метода главных компонент с помощью библиотеки OpenCVМинистерство образования и науки Российской Федерации Южно-Уральский государственный университет Кафедра Автоматика и Управление Курсовая работа На тему Реализация метода главных компонент с помощью библиотеки OpenCV Выполнил: Пушников А. А. Группа: ПС-669 Проверил Разнополов К. О. Дата “____” _____________2006 г. Челябинск 2006 г Оглавление Метод главных компонент2 Реализация метода главных компонент в OpenCV_ 3 Текст программы_ 4 Метод главных компонент Метод.

Создание текстовых документов с помощью MS WordМинистерство общего и профессионального Образования РФ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ СТАЛИ И СПЛАВОВ (ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ) Старооскольский филиал Кафедра автоматизации и промэлектроники Отчет По лабораторной работе № 2 По дисциплине “Компьютерное обеспечение специальности” Создание текстовых документов с помощью MS Word Выполнила: студентка группы ПИН – 03 – 2Д Монакова Ольга Приняла: Лазарева Татьяна Ивановна Старый Оскол 2003 г. Цель работы: Познакомиться с.

Решение системы линейных уравнений методом Крамера и с помощью расширенной матрицы 2МІНІСТЕРСТВО ОСВІТИІ НАУКИ УКРАЇНИ ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ Кафедра інформатики КУРСОВА РОБОТА Тема:”Рішення системи лінійних рівнянь методом Крамера та за допомогою розширеної матриці” З дисципліни”Програмування” ПОЯСНЮВАЛЬНА ЗАПИСКА Харків 2006 РЕФЕРАТ Пояснительная записка к курсовой работе: 33 c., 1 таб., 2 рис., 5 разделов, 1 приложение, 7 источников. Объект исследования – система линейных уравнений. Цель работы – разработка программы, с помощью.

Создать меню без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenuМинистерство образования Российской Федерации Институт переподготовки кадров Уральского государственного технического Университета Кафедра микропроцессорной техники Курсовая работа ТЕМА: Создать меню без файла описания ресурсов с помощью функций CreateMenu и CreatePopupMenu. Руководитель В. П. Кулюкин Слушатель гр. СП-923 Г. Г. 2001г. Содержание Введение 3 Постановка задачи 5 Создание меню без описания ресурсов с помощью функций CreateMenu и CreatePopupMenu 6 Текст программы 7.

Определение внешних спецификаций программ с помощью HIPO-технологииТема: Определение внешних спецификаций программ с помощью HIPO-технологии. Цель: Ознакомиться с методикой разработки внешних спецификаций программ, основанной на использовании HIPO-технологии проектирования программ. Приобрести практические навыки определения и оформления внешних спецификаций программ. Ход работы: 1. Формулировка задачи. С помощью HIPO-технологии составить внешние спецификации для комплекса программ решения следующей задачи: “Решение задач по физике. Законы идеального газа и уравнение состояния”. 2. Описание.

Поиск максимума одной функции многих переменных методом покоординатного спуска и с помощью методаРеферат В работе реализуется нахождение решения одной задачи на тему максимизации функций многих переменных. При этом рассматриваются методы дихотомии и покоординатного спуска. Пояснительная записка к курсовой работе состоит из двух основных частей: теоретической и практической. В теоретической части рассматривается поиск максимума одной функции многих переменных методом покоординатного спуска и с помощью метода дихотомии. Практическая часть содержит разработку программного обеспечения для.

Проектирование узла электронной аппаратуры с помощью САПР P-CADМИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Кафедра САПР ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОМУ ПРОЕКТУ По дисциплине “Автоматизация конструкторского и технологического проектирования” На тему: “Проектирование узла электронной аппаратуры с помощью САПР P – CAD “ Выполнил: Гадияк Н. А. Проверил: Аксенова Л. И. Пенза 2010 Содержание 1. Анализ схемы 2. Конструктивный расчет платы ТЕЗ 2.1 Расчет шага размещения ИС 2.2 Расчет.

Обработка данных с помощью средств MS ExcelВВЕДЕНИЕ Контрольная работа – это самостоятельная работа студента по дисциплине “Информатика”. Цель написания контрольной работы: – закрепить теоретические и практические знания по предмету; – научиться применять, полученные знания при решении практических вопросов; – научиться самостоятельно находить информационную[2] базу на основе знакомства с библиографическим фондом библиотеки и читального зала ВУЗа, с помощью электронной справки и других источников информации. 1. ПОРЯДОК И.


Создание таблиц с помощью SQL-запросовСоздание таблиц с помощью SQL-запросов Содержание Обзор Создание таблиц с помощью SQL Заключение Обзор На данном уроке мы познакомимся еще с одной возможностью создания таблиц – через посылку SQL-запросов. Как Вы, наверное, могли заметить на предыдущем уроке, Database Desktop не обладает всеми возможностями по управлению SQL-серверными базами данных. Поэтому с помощью Database Desktop удобно создавать или локальные базы данных или.

Постановка задачи и решение ее с помощью программы Project ExpertМинистерство образования и науки РФ Федеральное агентство по образованию Государственное образовательное учреждение Высшего профессионального образования Всероссийский заочный финансово – экономический институт Филиал в г. Туле КОНТРОЛЬНАЯ РАБОТА ПО ДИСЦИПЛИНЕ : “Компьютерные информационные технологии в финансовом менеджменте” НА ТЕМУ: “Постановка задачи и решение ее с помощью программы Project Expert “ Выполнил: студентка 6 курса Факультета финансово-кредитного Специальности Финансы и кредит Специализации.

Илон Маск рекомендует:  Атрибут hspace в HTML

Выполнение статистических расчетов с помощью ЭВМ в системе MINITAB и ExсelМинистерство образования и науки Украины Севастопольский Национальный технический Университет Выполнение статистических расчетов с помощью ЭВМ в системе MINITAB и Ex с el Методические указания к выполнению лабораторной работы №1 По дисциплине “Прикладная статистика” Севастополь 2008 г. УДК 658. Ознакомление со статистическим пакетом “Minitab”. Методические указания по выполнению лабораторной работы по дисциплине “Прикладная статистика” / Сост. Букач Б. А., Погорелова М.

Разработка модуля для поиска информации в MapInfo с помощью DelphiНЕГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ “сМОЛЕНСКИЙ ГУМАНИТАРНЫЙ УНИВЕРСИТЕТ” ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ, ЭКОНОМИКИ И ДИЗАЙНА КАФЕДРА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И БЕЗОПАСНОСТИ Группа 52 ПИГ Специальность 080801.65 Прикладная информатика (в ГЕОГРАФИИ ) “Разработка модуля для поиска информации в MapInfo с помощью Delphi” КУРСОВОЙ ПРОЕКТ “К защите допущена” Заведующий кафедрой _ _________ к. п. н., доцент А. В. Андреева “____” ___________ 2010 г.

Обработка табличной информации с помощью сводных таблиц средствами MicroSoft ExcelКраснодарский Государственный Университет Культуры и Искусств Факультет Экономики Управления и Рекламы Дисциплина: Информатика РЕФЕРАТ ТЕМА: “Обработка табличной информации с помощью сводных таблиц средствами MicroSoft Excel “ Выполнила: Студентка 2-го курса Группы НЭК-99 Никитина Т. Проверил:____________________ Краснодар 2001 Оглавление Оглавление……………………………………………………………………………………………………………….. 2 Введение…………………………………………………………………………………………………………………… 3 Создание сводной таблицы……………………………………………………………………………………… 3 Основные элементы сводных таблиц……………………………………………………………………… 4 Изменение структуры сводной таблицы………………………………………………………………… 5 Детальные данные сводной таблицы.

Проектирование и реализация информационно-поисковой системы с помощью CASE-средства DBDesignerКафедра электронно-вычислительной аппаратуры Лабораторная работа На тему: “Проектирование и реализация информационно-поисковой системы с помощью CASE – средства DBDesigner “ Москва 2009 Содержание: Задание Возможности программы DBDesigner Основные этапы проектирования базы данных Выполнение 1. Моделирование 1) Создание таблиц 2) Формирование отношений 2. Кодирование 3. Работа с базой данных 1) Установление соединения с базой данных на сервере 2) Синхронизация 4. SQL-запросы Список.

Кластеризация групп входящих пакетов с помощью нейронных сетей конкурирующего типаСодержание Введение 1. Описание способа решения задачи 2. Теоретическая часть 2.1 Что такое Data mining и KDD? 2.2 Описание рассматриваемых хакерских атак 2.2.1 Подмена одного из субъектов TCP-соединения в сети Internet 2.2.2 Нарушение работоспособности хоста в сети Internet при использовании направленного “шторма” ложных TCP-запросов на создание соединения либо при переполнении очереди запросов 2.2.3 Другие виды атак 2.3 Сеть с самоорганизацией.

Как можно с помощью Интернета изучать на уроке басни?Как можно с помощью Интернета изучать на уроке басни? Процесс преподавания литературы в средней школе ставит перед учителем слишком много разнообразных задач: и познакомить учащихся с отдельными произведениями русской классики, и дать понимание эпох, в которые создавались эти произведения, и научить постигать особенности стиля писателя, и познакомить с историко-литературным процессом и некоторыми литературоведческими понятиями, и научить навыкам литературного анализа, связной.

Разработка базы данных Автосалон АЛМАЗ с помощью программы Microsoft AccessЗадание Разработка базы данных “Автосалон АЛМАЗ” с помощью программы Microsoft Access. Примечание: Пояснительная записка должна быть оформлена в редакторе Microsoft Word в соответствии с требованиями ЕСКД, ЕСПД, ГОСТ 19.003-80 “Схемы алгоритмов и программ”. В пояснительной записке должны содержаться следующие разделы: Информационная модель; Структура базы данных; Описание используемого программного обеспечения; Листинг разработанного программного обеспечения; Формы входных и выходных данных; Контрольный пример;.

Проектирование радиоэлектронных средств с помощью ЭВМФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ Воронежский государственный технический университет Кафедра радиотехники 354-2006 МЕТОДИЧЕСКИЕ УКАЗАНИЯ К курсовому проектированию “Проектирование радиоэлектронных средств С помощью ЭВМ” для студентов 4 курса Специальности 210302 “Радиотехника” Очной формы обучения Воронеж 2006 Составители: канд. физ. – мат. наук, доц. Ю. Э. Корчагин, канд. техн. наук С. А. Слинчук, канд. техн. наук А. И. Кочетков, В. Я.

Модель процесса с помощью DFDСоздать информационную модель процесса с помощью DFD. Для построения использовать построения модели использовать программу BPwin. Процесс управления отделом сбыта. В качестве схемы управления процессами сбыта продукции можно рассматривать схему DFD, включающую, кроме процессов продуцирования выходных данных из входных и потоков данных, также хранилища данных. Внешними сущностями будут – клиент; – производство; – сотрудники отдела сбыта; – начальник отдела сбыта; –.

Решение задач с помощью компьютера Пояснительная записка к курсовому проекту по дисциплине ИМИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИННОВАЦИОННЫХ ТЕХНОЛОГИЙ И ПРЕДПРИНИМАТЕЛЬСТВА ПЕНЗЕНСКИЙ ФИЛИАЛ Кафедра “Прикладная информатика” Решение задач с помощью компьютера Пояснительная записка к курсовому проекту По дисциплине: “Информатика и программирование” Выполнила: студентка группы 05э1 Баткаева А. Проверил: Е. А Тихонова. Пенза 2006 Реферат. Пояснительная записка 22 листа, 12 рисунков, 5 источников литературы и 2 приложения. В курсовой работе использовались.

Графические возможности стандартной библиотеки VCLОТЧЕТ По лабораторной работе № 1. Тема: Графические возможности стандартной библиотеки VCL Цель:Изучить графические возможности стандартной библиотеки визуальных компонентов VCL, функций и процедур модуля Graphics. Научиться работать с отдельными точками растра. Освоить рисование сплошных объектов. Задание:Создать программу для закрашивания рисунка квадратами 20х20 пикселей с возможностью задания цвета из палитры цветов. Содержание отчета 1. Практическая часть. 1.1. Размещаю на форме 3.

Разработка алгоритмов различной структуры и их реализация с помощью программных средствФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ “ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ” (ГОУВПО ВГТУ) Факультет вечернего и заочного обучения Кафедра компьютерных интеллектуальных технологий проектирования КУРСОВАЯ РАБОТА По дисциплине Информатика Тема: Разработка алгоритмов различной структуры и их реализация с помощью программных средств Выполнил студент Лихотина К. Н. Руководитель Малышева И. С. Воронеж 2010 План Введение 1 Теоретическая часть 1.1.

Зараз ви читаєте: Как ускорить компиляцию с помощью предкомпилированных заголовков в С Builder

Читать статья по информатике, вычислительной технике, телекоммуникациям: «Как ускорить компиляцию с помощью предкомпилированных заголовков в С Builder»

Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ Builder

Precompiled headers can dramatically increase compilation speeds .

С++ Builder Language Guide

Вместо вступления сразу приведу пример. Полная сборка (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. Все заголовочные файлы, включенные до этой директивы, помещаются в один образ, например:

Такая последовательность создаст образ, содержащий скомпилированные vcl.h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков — даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl.h, то для этого cpp-файла будет создан новый образ.

Таким образом, для повторного использования предкомпилированного заголовка необходимо выполнение двух условий:

— состав включенный файлов до директивы hdrstop должен быть тем же

— последовательность включения файлов до директивы hdrstop должна быть той же

Сократить затраты на компиляцию стандартных заголовков до минимума можно только в том случае, если скомпилировать один образ, содержащий все стандартные заголовки, необходимые для проекта. Для этого нужно, чтобы:

— ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop

— в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для

С builder: как ускорить компиляцию с помощью предкомпилированных заголовков

Начал работать на C++Builder, достаёт скорость компиляции. Снял 2 галки, непомогло:
1) Project|Options|Packages -> Build with runtime packages
2) Project|Options|Linker -> Use dynamic RTL

НО я слышал, что компилить он может так же быстро как Delphi. Что сделать?

> НО я слышал, что компилить он может так же быстро как Delphi.

Не может такого быть, потому, что этого не может быть никогда. :-) Быстро он откомпилирует только исходники на Object Pascal, но не CPP.


> НО я слышал, что компилить он может так же быстро как Delphi.
> Что сделать?

Обманули. Ни один многопроходный компилятор С++ не может компилировать так же быстро, как однопроходный Delphi

он может компилировать быстрее, хоть и не так быстро, как дельфи.
читать о Precompiled Headers.

Задел за живое. Да я сам Delphi-ст! Знаю, что у Delphi самый быстрый компилятор. всё условно!


> Не может такого быть, потому, что этого не может быть никогда. :-)

Я не просто слышал, я видел собственными глазами, что компилится быстро. Тот чел сейчас недоступен, поэтому и обращаюсь к Мастерам

Вопрос: Как настроить C++Builder, чтобы он компилил в несколько раз быстрее?

DevilDevil © (12.07.06 12:22)
Всё равно будет медленно, особенно если проект подрастёт :) Так что можно пустить компилировать, пойти заваривать кофе и попутно продумывать, что будем добавлять в программу дальше.

1) билдер при сборке проекта компилирует только те файлы, которые поменялись либо зависящие от них. а поскольку при программировании единственный способ проверить себя на ошибки — это откомпилировать модуль (Alt+F9), то и компилировать он много не будет. дольше на линкер любоваться будете.
2) при изменении файлов заголовков он будет компилировать все файлы, которые этот заголовок включают. поэтому менять хедер файлы — дорогая операция.
3) читать о Precompiled Headers (#pragma hdrstop) — методики, хитрости. от себя добавлю «хитрость» — при использовании в проекте и сишных и паскалевских файлов precompiled header-ы перестают работать. поэтому паскалевские файлы в проекте использовать не рекомендуется. откомпилировать, добавить в проект .obj и включать .hpp файл где надо.

Ответ находится на:
http://people.overclockers.ru/seb/articles

offtopic/flame:
сколько лет уж этим си-компиляторам, а привести их в чувство до сих пор не могут.

> Ketmar © (12.07.06 13:23) [8]
могут. вы просто о них не знаете. :)

Какова наилучшая практика использования предварительно скомпилированных заголовков в современном приложении С++ Builder?

В настоящее время я переношу большой проект RAD Studio 2010 на XE4. Как часть этого, я воссоздаю многие файлы проекта. Я хотел бы воспользоваться возможностью, чтобы убедиться, что мы используем наилучший возможный механизм для предварительно скомпилированных заголовков, поскольку, как представляется, существует несколько способов сделать это.

Прямо сейчас мы компилируем только для 32-битных, но в будущем будем использовать 64-битный компилятор.

Вот что мы делаем в 2010 году, и почему я не уверен, что делать в XE4:

В RAD Studio 2010

У нас есть файл PchApp.h , который включает в себя и ряд других обычно используемых файлов заголовков, в основном заголовки для различных обычно используемых основных классов в проекте. Этот заголовок включен в начало каждого файла CPP, за которым следует #pragma hdrstop , например:

Затем у нас есть следующие настройки в разделе Precompiled Headers параметров проекта:

Это не особенно быстро компилировать (12 минут для около 350 000 строк кода.) Я не уверен о:


  • «Вставить предварительно скомпилированный файл заголовка»: должно ли это вставить PchApp.h?
  • «Предварительно скомпилированные заголовки кэша (должны использоваться с -H или -H» xxx «)»: параметр -H является «PCH filename», поэтому мы его используем, но, безусловно, точка предварительно скомпилированного заголовка заключается в том, что он «кэшируется» или предварительно создается один раз для компиляции. Какая дополнительная разница делает это?
  • Должны ли мы включить две строки для включения PchApp.h и pragma hdrstop в .cpp файлы? Есть ли способ сделать это только в вариантах проекта, а не дублировать эти две строки в каждом отдельном файле? Нужны ли они?

Другими словами, я не уверен, что это правильные или оптимальные настройки, но из чтения документации Я точно не уверен, что было бы лучше. Я знаю, что я не понимаю всех вариантов достаточно хорошо — одна из причин этого вопроса:)

В RAD Studio XE4

Диалог 32-битных параметров компилятора XE4 одинаковый, но две вещи меня путают и/или заставляют меня сомневаться в том, что нынешний подход 2010 года является лучшим.

1. Поведение по умолчанию

При создании нового проекта VCL Forms среда IDE создает заголовок названный по умолчанию Project1PCH1.h, который предназначен для предкомпилированного заголовка проекта. Этот заголовок включает и и отображается как node в диспетчере проектов. Он не включен в файл Form1.cpp по умолчанию, но #include , за которым следует #pragma hdrstop , находится на самой вершине Form1.cpp, за которой следуют другие заголовки.

Илон Маск рекомендует:  Что такое код setallpalette

Диалог настроек XE4 по умолчанию для нового проекта с использованием этого заголовка:

Я (наивно?), работая в предположении, что по умолчанию действительно лучшие/самые оптимальные настройки. Некоторые вещи меня озадачили:

  • Предполагаемый предварительно скомпилированный заголовок проекта Project1PCH1.h не упоминается в настройках предварительно скомпилированного заголовка.
  • Заголовки не кэшируются
  • Имя файла PCH не указано (должно ли оно быть Project1PCH1.h ?)
  • Файлы .cpp не включают Project1PCH1.h .

На самом деле я понятия не имею, как компилятор или IDE действительно знают, что он должен использовать Project1PCH1.h , или для каких файлов .cpp он должен использовать его, поскольку он никоим образом не упоминается найти.

Это самая загадочная вещь для меня, и это побудило задавать этот вопрос и прояснить всю мою путаницу в отношении PCHes. Я планировал скопировать/использовать настройки по умолчанию IDE, но я не хочу, пока не пойму, что они делают.

2. Мастер PCH

С 2010 года среда IDE включает в себя мастер с предварительно скомпилированным заголовком. Я никогда не мог заставить его работать — я запускаю его снова сейчас, чтобы получить его результаты и объяснить свою память о том, что «не работает», но, похоже, занимает несколько часов, поэтому я обновлю этот вопрос позже.

Изменить: он работает, хотя он занимает несколько часов, и создал список (для меня, зная исходную базу) нечетных заголовков. Мое воспоминание о том, как его пытались несколько лет назад, состоит в том, что он не запускался вообще — определенное улучшение.

Поскольку он существует, это может быть лучший способ настроить использование предварительно скомпилированных заголовков во вновь созданный файл проекта, созданный для обновления проекта 2010 года. Как мне лучше всего это сделать? Будут ли запущены все файлы .cpp, включая PchApp.h?

Вопросы

С этим в качестве фона у меня есть следующие вопросы:

  • Существующие настройки.Я создаю новый файл проекта и добавляю тысячи ранее существовавших .cpp файлов, все с «#include PchApp.h; #pragma hdrstop» наверху. Должен ли я копировать существующие настройки PCH RS2010? Должен ли я удалить две вышеуказанные строки и заменить их на что-то еще?
  • Использование мастера PCH:. Создает ли ваш опыт оптимальные настройки? Включает ли он файлы, которые, если они будут изменены, приведут к перестройке больших площадей проекта (вероятно, это не оптимально для кодирования)? Можно ли использовать в существующем проекте, или нужно ли удалять такие элементы, как наш «#include PchApp.h», прежде чем использовать его?
  • CPP файлы/единицы и правильная включает.. Файлы .cpp, которые используют предварительно скомпилированные заголовки, не включают сам предварительно скомпилированный заголовок, но только заголовки, которые действительно нужны .cpp, даже если PCH включает те? Что делать, если у вас есть текущая ситуация, когда файл PchApp.h содержит несколько общих заголовков, и поэтому .cpp файлы фактически не включают их сами? Если вы удалите включение PchApp.h и замените его подмножеством заголовков в PchApp.h, то нужны конкретные файлы .cpp, если они находятся выше или ниже #pragma hdrstop? (Выше, я думаю.) Что делать, если вы затем включите что-то еще выше с ними, которое не включено в предварительно скомпилированный заголовок — изменит ли он использование PCH для этой конкретной единицы, заставив PCH быть перестроен (проблемы с производительностью?) И т.д.?
  • Настройка по умолчанию: Предполагая, что настройка по умолчанию для нового проекта оптимальна, как лучше всего перенести текущую систему на ее использование?
  • Нестандартная настройка: Если настройка по умолчанию не оптимальна, что это такое? Это, я думаю, является ключевым вопросом.
  • 32 и 64-разрядные: Зная, что скоро перейдем к 64-битной версии, что нам делать, чтобы предварительно скомпилированные заголовки работали как на 32, так и на 64 бит? Должны ли все знания PCH быть в вариантах проекта, а не в файлах .cpp, поэтому разные настройки для 32- и 64-разрядной компиляции?

Я ищу четкий, подробный, пояснительный, руководящий ответ, в котором четко объясняются лучшие практика, параметры настройки, элементы для включения в .cpp файлы, заголовок и/или файл проекта и т.д. — другими словами, что-то, чтобы очистить меня к настоящему времени (после всего вышеизложенного!), довольно смутное понимание. Высококачественный ответ, который может использоваться в качестве ссылки на PCH в будущем другими пользователями С++ Builder в будущем, будет отличным. Я намерен добавить щедрость в через пару дней, когда я могу.

Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ Builder

Вместо вступления сразу приведу пример. Полная сборка (build) проекта, содержащего около 170 cpp-модулей, при использовании предкомпилированных заголовков происходит за 811 секунд, при этом число обработанных компилятором строк составляет 1,808,780. При компиляции того же проекта без использования предкомпилированных заголовков, время сборки составляет 2399 секунд, а число строк, обработанных компилятором — 45,261,820. Впечатляет, не так ли? Плата за это ускорение, в принципе не велика — предкомпилированный образ, размер которого около 40 Мб.

При компиляции исходных текстов, компилятор должен обработать все *.cpp файлы проекта и все включенные в них *.h — файлы. При этом обрабатываются как пользовательские заголовочные файлы, так и стандартные, такие как vcl.h или Word2k.h. Количество кода, находящегося в стандартных заголовках может быть очень большим, например размер файла Word2k.h превышает 5 Мб, в нем больше 130 000 строк кода.

Так как содержимое стандартных заголовков не изменяется, то их компиляция при каждой сборке проекта является напрасной тратой времени. Предкомпилированные заголовки помогают решить эту проблему — стандартные файлы компилируются один раз, а затем используется скомпилированный двоичный образ.

Такая последовательность создаст образ, содержащий скомпилированные vcl.h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков — даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl.h, то для этого cpp-файла будет создан новый образ.

Перевод заголовков в немецком языке
Лексико-стилистические и грамматические особенности заголовков, их виды и функции. Основные трудности перевода немецких заголовков на русский язык. Кл.

Стилистика газетных заголовков
Стилистическая характеристика газетных заголовков. Основные признаки публицистического стиля. Вопрос о выделении газетного стиля. Роль и значение заго.

Использование Adobe® Flash® Builder™ 4
Adobe® Flash® Builder™ – это интегрированная среда разработки (Integrated Development Environment; IDE) длясоздания кросс-платформенных многофункциона.

Borland C++ Builder — основные моменты
Работа в Borland C++ Builder. Среда разработки и компоненты C++ Builder. Свойства компонентов. Менеджер проектов. Создание приложений в C++ Builder. В.

Рубрикация. Классификация заголовков
Общие понятие рубрикации как системы заголовков структурных элементов работы и основного текста. Виды деления текста на главы и параграфы. Классификац.

Как ускорить компиляцию с помощью предкомпилированных заголовков в С++ Builder


Precompiled headers can dramatically increase compilation speeds .

С++ Builder Language Guide

Вместо вступления сразу приведу пример. Полная сборка (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. Все заголовочные файлы, включенные до этой директивы, помещаются в один образ, например:

Такая последовательность создаст образ, содержащий скомпилированные vcl.h и string. Этот образ будет использован для другого cpp-файла, если в нем до директивы hdrstop будут включены те же файлы, в том же порядке. Обращу внимание, что важен не только состав, но и порядок следования заголовков — даже если следующий cpp-файл включает те же заголовки, но сначала указан string, а потом vcl.h, то для этого cpp-файла будет создан новый образ.

Таким образом, для повторного использования предкомпилированного заголовка необходимо выполнение двух условий:

— состав включенный файлов до директивы hdrstop должен быть тем же

— последовательность включения файлов до директивы hdrstop должна быть той же

Сократить затраты на компиляцию стандартных заголовков до минимума можно только в том случае, если скомпилировать один образ, содержащий все стандартные заголовки, необходимые для проекта. Для этого нужно, чтобы:

— ВСЕ cpp-файлы проекта имели одинаковый блок включений до директивы hdrstop

— в этот блок должны входить ВСЕ стандартные заголовочные файлы, необходимые для проекта

Выполнить эти условия достаточно просто, для этого в начало каждого cpp-файла необходимо поместить следующие строки:

где pch.h — файл, содержащий включения всех стандартных заголовков:

Полный текст моей версии этого файла приведен в конце статьи. На h-файлы, входящие в предкомпилированный образ, накладывается ограничение — в них не должно быть инициализированных данных, например, в math.hpp есть строки:

static const Extended NaN = 0.0 / 0.0;

static const Extended Infinity = 1.0 / 0.0;

Из-за наличия этих констант включить math.hpp в файл pch.h нельзя.

Кстати, С++ Builder при добавлении новых модулей в проект реализует описанную стратегию управления предкомпилированными заголовками. Например, при создании нового приложения, файл Unit1.cpp будет таким:

Если посмотреть на текст vcl.h, то можно увидеть, что он является оболочкой для включения большого числа других стандартных заголовочных файлов.

Управлять составом включаемых в vcl.h заголовков можно с помощью специальных символов (INC_VCLDB_HEADERS, INC_VCLEXT_HEADERS и др.). В моей версии pch.h эти символы определяются с помощью #define до включения vcl.h, что приводит к увеличению числа включаемых файлов.

Как в существующем проекте перейти к использованию предкомпилированных заголовков

Даже в большом проекте перейти к использованию предкомпилированных заголовков достаточно просто.

В свойствах проекта нужно включить кэширование предкомпилированных заголовков и рекомендуется указать «персональный» файл, в котором будет храниться образ предкомпилированных заголовков: Project — Options — закладка Compiler, группа «Pre-compiled headers». Тут должно быть выбрано «Cache pre-compiled headers», а в поле «File Name» нужно ввести «pch.csm». При такой настройке образ с предкомпилированными заголовками будет находится в папке с проектом, в файле pch.csm.

После этого в начало каждого cpp-модуля необходимо вставить 2 строки:

Все ранее включенные заголовочные файлы остаются на своих местах, их удалять не надо. Например:

#include «pch.h» // включает vcl.h, string и т.д.

Так как во всех стандартных заголовках применяются стражи повторного включения, то повторное их упоминание не влечет за собой повторного включения.

В принципе, при использовании pch.h, техническая потребность во включении стандартных заголовков исчезает. Однако, полезно все же указывать все необходимые для каждого конкретного модуля заголовки ниже директивы #pragma hdrstop. Во-первых, это в некоторой степени документирует модуль — по включаемым файлам можно судить, какими возможностями пользуется этот модуль. Во-вторых, это облегчает повторное использование модуля в других проектах, в которых либо не используется pch.h, либо его содержимое может быть другим.

Теоретически можно еще больше повысить эффективность компиляции, если включить в pch.h не только стандартные, но и все пользовательские заголовочные файлы. Практически, так как пользовательские заголовки меняются достаточно часто, это может повлечь за собой частую перекомпиляцию pch.h, что негативно скажется на времени компиляции. Кроме того, пользовательские заголовки обычно не бывают очень большими и компилируются очень быстро. Поэтому включать их pch.h не целесообразно.

Как проверить, что предкомпилированные заголовки используются эффективно

При добавлении в проект новых файлов нужно не забывать включать в них pch.h, иначе для них не будет использован общий предкомпилированный образ. Такая же ситуация может возникнуть, если в каком-то модуле включаются стандартные заголовки, которые не вошли в pch.h. Для того, чтобы отследить такие файлы, есть несколько способов:

— визуальное наблюдение за процессом компиляции. Обычно, число строк компилируемых в одном файле не должно превышать 10000-15000 строк

— если для проекта выбран индивидуальный файл для хранения образа предкомпилированных заголовков и этот файл называется pch.csm, то нужно обратить внимание на наличие вспомогательных файлов с именами pch.#00, pch.#01 и т.д. Если для всех файлов проекта используется один и тот же предкомпилированный образ, то вспомогательный файл должен быть только один — pch.#00. Если таких файлов больше, это значит что для каких-то cpp-модулей создаются дополнительные образы.

/* Все, что подключается предыдущими 3-мя строчками

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL