![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Еще помогает ключик компилятора, который компиляцию распараллеливает (например, -j для gcc). Ну это совет для счастливых обладателей многоядерных систем (ну или хотя бы Р4 с HT). Вот у меня библиотека собиралась где-то полторы минуты, а когдя я про этот ключик узнал, стала за 10 секунд собираться, ибо в машине два четырехъядерных ксеона.
А еще компиляцию по сети распараллеливать можно.... Это сообщение отредактировал(а) SaDFromSpb - 25.11.2007, 02:32 -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
SaDFromSpb, этот ключик имеет какой-нибудь смысл при компиляции одного модуля? Или только когда все модули скопом компилируешь помогает?
Просто, я точно такой же ключик использую, только относительно make - он одновременно запускает компиляцию сразу нескольких модулей(точнее использовал - сейчас p3-1GHz + 768RAM делать этого не позволяют :( ). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
А!! блин! Спать уже пора мне! Естественно, этот ключ к make'у относится! Распараллеливается по объектникам, на сколько я могу судить. Следовательно, при компиляции одного - смысла не имеет. ПыСы: Знатный исходничек должен быть, чтобы единственный объектник из него значительное время компилился. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
По make targets, если быть точнее ![]()
Не обязательно. В случае неиспользования PCH необходимо приличное время на парсинг хэдеров. Т.е. вот у меня, даже при размере одного модуля не более 250 строк, он без PCH компилится 15-40 секунд. Вот и посчитай сколько времени у меня идёт пересборка проектика из 50-60 модулей. C PCH 1-2 секунды на модуль. Разница совсем не 30% ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Ага. ![]()
Хм.. Однако ж.. ![]() -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
Mayk |
|
||||||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
замеряем. [тесты приложу в аттаче]
разница ощутима.
теперь пробуем с лямбдой и биндом, #include которых вынесен из pch.hh в *.cpp: [мне было в ломы читать доку о том как заставить компилить .hpp в .gch и йа тупо переименовал файл]
ыыыы. Однако как-то неприятно что boost.bind, помещенный в pch.hpp приводит к ошибкам линковки. Вот допустим, изменили мы исходники, компилируем, линкуем, и тут оп-па. ошибки. Вот сиди как дурак и думай, это ты накосячил, или pch. Зато изобрели incremental link ![]() Это сообщение отредактировал(а) Mayk - 25.11.2007, 06:43 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||||||
|
|||||||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
а я придерусь к
если я сие выражение правильно понял, то оно неверое. PCH должно быть несколько (для больших проектов), причем в самый главный должны быть включены самые статические библиотеки, во второй должен быть включен первый и библиотеки, меняющиеся чуть более часто и т.п. все это не мои идеи, а нагло спертые с книги "Шаблоны C++ Справочник разработчика" ![]() Это сообщение отредактировал(а) Alek86 - 25.11.2007, 08:48 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Alek86, ограничение в один PCH накладывает qmake.
Добавлено через 3 минуты и 17 секунд
У меня такого ключика нет. Но тормозит так дико именно на сборке проекта для отладки (хотя, релиз там собирать не пробовал). |
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Не только ![]() Видишь ли... Ты можешь насоздавать с десяток PCH, но если взять произвольный модуль, то в нём должен использоваться только один PCH. Это очень ясно прописано в мануале GCC(и ограничение qmake тут не при чём - более одного PCH не позволяет и MSVC).
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
цитата из "Cpp Templates The Complete Guide" глава 6.5 я неправильно прочел? тут другой смысл? |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Смысл тут такой, что делать слои из PCH. Я же говорил о следующей ситуации: допустим, ты отдельно прекомпильнёшь std.hpp, отдельно Qt.hpp и напишешь в модуле
Так вот, так делать нельзя - можно только что-то одно. Слоями можно(но смысла особого не вижу - разве что свои рабочие заголовки прекомпилять). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
я вижу для больших проектов. жаль, если нет возможности почему нельзя чужие? они ж тоже меняются (но намного реже) - их прекомпилять и надо |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Я не пробовал использовать "слоевую" организацию PCH - если при компиляции рабочих хэдеров действительно получится reuse'ить уже готовый PCH, содержащий std,Qt,Boost и пр. либы, которые, то это просто прекрасно(тогда понимаю, почему bsa сказал, что ограничение на один PCH - это у qmake).
Да... не всегда намного реже ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Я просто посмотрел, команду компиляции g++ с использованием PCH и без. Отличие только одно - добавляется -include debug/projectname.gch, где debug/projectname.gch - это такой каталог, в котором создается файл "c++", размером под сотню мегабайт. В описании опции -include в мане gcc сказано, что она аналогична инструкции препроцессора #include в тексте программы. Отсюда напрашивается вывод, что можно указывать больше директив компилятора -include для каждого набора заголовков... Но что-то мне подсказывает, что для одного модуля не стоит использовать более одного прекомпилированного заголовка.
|
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
http://gcc.gnu.org/onlinedocs/gcc/Precompi...ompiled-Headers
Там же ещё несколько правил, относительно корректного использования pch. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |