Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

9.0K
11 ноября 2005 года
only
28 / / 11.11.2005
"На h-файлы, входящие в предкомпилированный образ, накладывается ограничение - в них не должно быть инициализированных данных." ( http://www.codenet.ru/progr/bcb/Precompiled-Headers.php )

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

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

* [COLOR=blue]Dialogs.hpp[/COLOR]: [COLOR=teal]extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);[/COLOR]
* [COLOR=blue]DB.hpp[/COLOR]: [COLOR=teal]TField* __fastcall CreateFieldComponent(Classes::TComponent* Owner, TObjectField* ParentField = (TObjectField*)(0x0), AnsiString FieldName = "");[/COLOR]
* [COLOR=blue]DBTables.hpp[/COLOR]: [COLOR=teal]void __fastcall EncodeIndexDesc(Bde::IDXDesc &IndexDesc, const AnsiString Name, const AnsiString FieldExpression, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]DBTables[/COLOR]: [COLOR=teal]void __fastcall AddIndex(const AnsiString Name, const AnsiString Fields, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]math.hpp[/COLOR]: [COLOR=teal]static const Extended NaN = 0.0 / 0.0;[/COLOR] - не правдо ли удивительно, как этот файл попадает в рассмотрение относительно предкомпиляции? Ведь в рассмотренном списке его не присутствует, не путайте с "math.h".
Остальные примеры инициализации не вижу смысла выкладывать...
Кто знает как выйти из этого положения - помогите пожалуйста. Здесь достаточно модулей чтобы компиляция продолжалась 5-10 минут, а то и больше.

Версия Borland C++ 6.0 (Build 10.166)
EhLib 3.6 Russian version.
1
11 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by only
"На h-файлы, входящие в предкомпилированный образ, накладывается ограничение - в них не должно быть инициализированных данных." ( http://www.codenet.ru/progr/bcb/Precompiled-Headers.php )

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

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

* [COLOR=blue]Dialogs.hpp[/COLOR]: [COLOR=teal]extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);[/COLOR]
* [COLOR=blue]DB.hpp[/COLOR]: [COLOR=teal]TField* __fastcall CreateFieldComponent(Classes::TComponent* Owner, TObjectField* ParentField = (TObjectField*)(0x0), AnsiString FieldName = "");[/COLOR]
* [COLOR=blue]DBTables.hpp[/COLOR]: [COLOR=teal]void __fastcall EncodeIndexDesc(Bde::IDXDesc &IndexDesc, const AnsiString Name, const AnsiString FieldExpression, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]DBTables[/COLOR]: [COLOR=teal]void __fastcall AddIndex(const AnsiString Name, const AnsiString Fields, Db::TIndexOptions Options, const AnsiString DescFields = "");[/COLOR]
* [COLOR=blue]math.hpp[/COLOR]: [COLOR=teal]static const Extended NaN = 0.0 / 0.0;[/COLOR] - не правдо ли удивительно, как этот файл попадает в рассмотрение относительно предкомпиляции? Ведь в рассмотренном списке его не присутствует, не путайте с "math.h".
Остальные примеры инициализации не вижу смысла выкладывать...
Кто знает как выйти из этого положения - помогите пожалуйста. Здесь достаточно модулей чтобы компиляция продолжалась 5-10 минут, а то и больше.

Версия Borland C++ 6.0 (Build 10.166)
EhLib 3.6 Russian version.


Можно уточнить вопрос: действительно ли только это по вашему служит причиной длительной компиляции, и все остальные уже устранены? Я использую теже библиотеки - компиляция и линковка 14 достаточно крупных проектов у меня занимает 5 - 8 минут.

9.0K
23 ноября 2005 года
only
28 / / 11.11.2005
Цитата:
Originally posted by kot_
Можно уточнить вопрос: действительно ли только это по вашему служит причиной длительной компиляции, и все остальные уже устранены? Я использую теже библиотеки - компиляция и линковка 14 достаточно крупных проектов у меня занимает 5 - 8 минут.



Считаю, что только это...
Моя компиляция длится не меньше 7 минут, при любых попытках её ускорить. Я пробовал Release с отсутствием integrate debugging, также убрана оптимизация (code optimization), пробовал Make, постоянно отключено "use debug libraries", включал "don't generate state files", 480 Мб оперативной памяти: - всё это не мопогает. Единственная надежда на то о чём я писал.

1
23 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by only
Считаю, что только это...
Моя компиляция длится не меньше 7 минут, при любых попытках её ускорить. Я пробовал Release с отсутствием integrate debugging, также убрана оптимизация (code optimization), пробовал Make, постоянно отключено "use debug libraries", включал "don't generate state files", 480 Мб оперативной памяти: - всё это не мопогает. Единственная надежда на то о чём я писал.


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

9.0K
25 ноября 2005 года
only
28 / / 11.11.2005
Заметил интересную вещь - никак не могу влиять на включение предкомпилированных заголовков. Такое чувство как будто они вписаны где-то в настройках самой среды по умолчанию, а любое механическое влияние в коде игнорируется. Например, чтобы я не делал постоянно входит в рассмотрение относительно предкомпилирования такой файл как Dialogs.hpp. Я закомментировал всё что можно: в vcl.h --> INC_VCL; в basepch0.h --> #include <Dialogs.hpp>
- но всё равно компилируется Dialogs.hpp.

"Компилируется, ну и бог с ним" - скажете вы. Но там у меня инициализация:
extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);
- и мне надо чтобы он не рассматривался, хотя бы временно. Саму же инициализацию в нём убирать я боюсь: мало ли где она учитывается.
8.2K
30 ноября 2005 года
ReSearcher
19 / / 12.11.2005
Цитата:
Originally posted by only

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

* [COLOR=blue]Dialogs.hpp[/COLOR]: [COLOR=teal]extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);[/COLOR]



По моему то о чём ты пишешь прекомпилед хидерам не помеха.
По путаешь инициализацию переменной или константы

 
Код:
static const Extended NaN = 0.0 / 0.0;

с заданием значения аргумента функции по умолчанию
 
Код:
void MyClass::MyFunc( int Arg1= 1, String Arg2= "1", ArgClass Arg3= ArgClass())


В твоём случае дело в чём-то другом.


Кстати, а что практически означает опция 'BCB 5 IDE MainMenu->Tools->Environment options->CACHE HEADERS ON STARTUP'
9.0K
30 ноября 2005 года
only
28 / / 11.11.2005
Я тоже думаю что путаю, но с предпосылки компилятора. Мы видимо с компилятором вместе путаем :)

Опция Cache headers on startup, обеспечивает предварительную компиляцию в оперативной памяти заголовочных файлов.
8.2K
30 ноября 2005 года
ReSearcher
19 / / 12.11.2005
В чём предпосылка? Как о мнении компилятора узнаёшь? Он вроде молчит?

По моему опыту, в борландЕ есть ошибки я даже баг лист себе веду, но в 98% случаев проблем виноват сам. Откуда вообще взялась идея проводить тонкую оптимизацию написанного борландом? Ведь в проект по умолчанию до строки #pragma hdrstop безбоязненно включены *.h со значениями параметров функций по умолчанию? Может я чего не понимаю, тогда пожалуйста просвятите.

Ещё: прибей pre-compiled headers и откомпили на одном unit'е. Посмотри размер. Теперь весь проект компили. Если размер изменился, где-то до hdrstop различия. Как минимум потому тормозить начинает. У меня как-то раз такой гемор был. Ещё автор в статье на которую ссылаешься говорит что появляются доп. файлы старше чем *.#00.

Цитата:
Опция Cache headers on startup, обеспечивает предварительную компиляцию в оперативной памяти заголовочных файлов.


Да дословный перевод то понятен. А практически что означает? Во первых почему 'on startup'. (не 'on project load') Откуда известно какой я проект загружу и соответственно Cache headers которого надо делать?

9.0K
01 декабря 2005 года
only
28 / / 11.11.2005
... - не молчит: [C++ Warning] Dialogs.hpp(437): W8058 Cannot create pre-compiled header: initialized data in header - обратите внимание на файл. Значения по умолчанию в его функциях не должны вызывать отмену формирования предкомпиллированного образа, по вашему мнению и мнению ещё одного человека, но именно на них ссылается компилятор в своём предупреждении:
extern PACKAGE bool __fastcall PromptForFileName(AnsiString &AFileName, const AnsiString AFilter = "", const AnsiString ADefaultExt = "", const AnsiString ATitle = "", const AnsiString AInitialDir = "", bool SaveDialog = false);

Удивительно, но компилятор как буд-то не воспринимает то ли vcl.h, тол ли мои изменения в нём и включённом в него файле, либо что-то путаю я. Но повлиять на компиллирование, я так думаю, какого либо заголовка из vcl.h я не в состоянии. Он как буд-то компилирует стандартную схему, а к моим изменениям никак невосприимчив. Вот собственно для уяснения этого момента всё вышеозначенное и проводилось.

Размер чего смотреть, *.csm? Посмотрел - не меняется (17.3 MB).

Про последнее: какой проект будет компиллироваться неизвестно, поэтому увеличения производительности за счёт сформированного образа не будет, при смене проектов он будет формироватся каждый раз заново. Про остальное не знаю.
8.2K
01 декабря 2005 года
ReSearcher
19 / / 12.11.2005
В общем херня какая-то.

Эта ошибка появляется когда #include <vcl.h> не в модуле (скажем Unit1.cpp) а вынесена (например в <CommonHeader.hpp>) и (!) есть #include <math.hpp>.
С #include <math.h> всё хорошо.

<math.hpp> нужен? Если нет надо выкинуть. Или перенести #include <vcl.h> в модуль.
Хотя вопрос что это за глюк остаётся.

В BCB5 такая же хрень. Даже похуже чуть.


Там не один *.csm, а есть ещё как минимум *.#00, и возможно *.#01 и т.д. Я смотрел по общему размеру всех файлов. А автор статьи пишет что *.#01 и пр. появляются при изменениии строк до hdrstop в модулях. Это проверить надо.
9.0K
01 декабря 2005 года
only
28 / / 11.11.2005
В том то и дело что vcl.h в модуле. Ничего лишнего не приписывал, все заголовки по стандарту (math.hpp естественно тоже не включён)
8.2K
01 декабря 2005 года
ReSearcher
19 / / 12.11.2005
Если стандартный проект не компилится тогда переустановка борландЫ поможет.
9.0K
05 мая 2006 года
only
28 / / 11.11.2005
Есть две вещи, которые мне помогли и которые рекомендую остальным, в случае сходных с моими проблемами.

Первая - IDECompilerSpeedFixV13.zip: ускоряет компиляцию и считаю добротно сработан. Даже если вас всё устраивает, попробуйте.

Вторая, на случай проблем с инкрементной компиляцией, в моём случае именно эта проблема донимала меня до недавнего времени, мне посоветовали сделать так: исключить из проекта все файлы с расширением *.pas, вместо них включить их объектные версии *.obj (но помните, что при смене версии исходного файла - *.pas, нужно перестроить проект и включить обновлённый *.obj). Могу сказать с долгожданным облегчением: "Мне помогло!". Надеюсь и вам поможет.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог