Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как быстро скомпилить проект? 
:(
    Опции темы
gunmanill
  Дата 12.11.2011, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



Есть программа размером порядка 1гб Большая часть кода сгенерированно и представляет собой описание функций. Причем функции достаточно простые по типу вернуть сумму и пр. Эти функции я запихал в отдельные заголовочные файлы. Под win32 скомпилить впринципе не получилось. Поставил x64 систему, проапдейтил комп 16гб оперативки, 2 жестких диска в рейде 0. Поставил intel c++ компилятор. В итоге что происходит - по-началу прога постепенно сжирает всю оперативку, файл подкачки 30гб и процессор вроде как что-то просчитывает. Через сутки проц уже вообще как-будто ничего не делает, иногда подпрыгивает в 5%, а компилятор просто там что-то пережевывает из оперативки на жесткий и обратно. Я выдержал 3 дня ожиданий и выключил. Прочитал, что есть параметр /Od - выключить все оптимизации. Сейчас поставил снова компилить, после работы приду посмотрю что будет. Неужели так трудно перевести все в машинный код? Мне впринципе не нужны никакие оптимизации. Может есть какой-то способ и я просто не то делаю?
PM MAIL   Вверх
boostcoder
Дата 12.11.2011, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



такое возможно только в том случае, если исходники очень большого размера. так что делите.

Добавлено через 7 минут и 19 секунд
боюсь даже поинтересоваться, для чего вам миллионы функций smile 
PM WWW   Вверх
borisbn
Дата 12.11.2011, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



user posted image


Это сообщение отредактировал(а) borisbn - 12.11.2011, 09:24


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
gunmanill
Дата 12.11.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



 smile  Результатими функций запоняется матрица.  Т.е. лучше рабить на бОльшее колличество файлов, так компилятору легче будет?
PM MAIL   Вверх
boostcoder
Дата 12.11.2011, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



gunmanill, да. только не на хидеры. а то вдруг у тебя весь код в хидерах написан. тогда разбивать бесполезно.

Добавлено через 14 секунд
borisbn, а это к чему?

Добавлено через 52 секунды
ааа, начало пророчества терминаторов smile 
PM WWW   Вверх
gunmanill
Дата 12.11.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



А тогда смысла нет разбивать, мне тогда чтобы обратиться к функциям придется писать хидер, который выйдет чуть всего-лишь меньше. У меня в теле функции сразу идет что-то по типу return a+b*c...  Или если в хидере только заголовки, то он не будет его жестко лопатить? 

Это сообщение отредактировал(а) gunmanill - 12.11.2011, 09:45
PM MAIL   Вверх
boostcoder
Дата 12.11.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



да. вынеси в хидеры декларации, а в .c/.cpp реализации. и подели на файлы. а то вдруг у тебя все в одном файле с миллионом строк.
PM WWW   Вверх
borisbn
Дата 12.11.2011, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



я просто предположил, что за систему компиляет gunmanill  smile 

Проект лучше разбить на н-ное количество статических библиотек, а потом линковать их к проекту программы.
Если не получается смыслового разделения - можно просто разбить по 1000...10000 ф-ций на либину.
Да... и в этом случае реализацию функций (даже очень простых) лучше перенести в *.cpp

Добавлено через 3 минуты и 38 секунд
Цитата(gunmanill @  12.11.2011,  08:06 Найти цитируемый пост)
Поставил intel c++ компилятор.

мягко говоря, не самый быстрый. студийный побыстрее будет. особенно, если дать ему сразу несколько проектов (в одном солюшене). тогда он будет компилировать их параллельно. Кста, хорошо ложится на разбиение на либины

Добавлено через 7 минут и 10 секунд
а... и ещё. компилять надо без дебаговой информации, ессно. существенно быстрее будет


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
alexvs11
Дата 12.11.2011, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



make -j 8 ?  smile 
так что вы собариаете
PM MAIL   Вверх
bsa
Дата 12.11.2011, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(gunmanill @  12.11.2011,  09:06 Найти цитируемый пост)
Неужели так трудно перевести все в машинный код? Мне впринципе не нужны никакие оптимизации. Может есть какой-то способ и я просто не то делаю? 

Чтобы исходник перевести в исполняемый код система сборки должна выполнить 4 операции:
1. препроцессинг (обработка всяких #define/#include и пр)
2. компиляция - преобразование к ассемблерному коду
3. ассемблирование - преобразование к объектному коду.
4. компоновка

Причем, пункт 1 в общем случае увеличивает объем исходника. Пункт 2 сжирает памяти в несколько раз больше, чем исходник. Ассемблерный текст занимает больше места, чем перед компиляцией.
Таким образом, чтобы программа успешно скомпилировалась необходимо разделись твой гигабайтный исходник на тысячу мегабайтных и компилировать по отдельности.
Кстати, мне одно непонятно, а зачем тебе хидер? Т.е. где-то есть программа, которая все эти миллионы функций использует? Тогда она тоже должна быть невпупительного объема. Короче, давай больше информации: зачем, для чего, как работает... А мы подумаем и скажем, как лучше организовать этот проект.
PM   Вверх
gunmanill
Дата 12.11.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



У меня всего один cpp и он использует все эти функции, в хидер я запилил просто для удобства(не пихать же в cpp, он у меня тогда вообще не откроется в редакторе). Чтобы функции вызывать лелаю так:
double (*f[N])(double *) = {f1,f2,f3....fN};  ну и в cpp вызываю по индексу, поэтому он небольшой.
Я сейчас разбиваю на cpp'шники, в хидерах оставляю только заголовки, может лучше пойдет... 
PM MAIL   Вверх
math64
Дата 12.11.2011, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Возможно, зря мелкие функции перенесены в заголовки.
C++ код может быть коротким, а генерируемый машинный код длинный. Например, обращение к указатетелю на метод класса может занимать около 256 байт.
При каждом вызове машинный код дублируется.
Ограничь применение шаблонов - опять же, короткий код на C++ выливается в дублирование почти идентичного машинного кода.

PM   Вверх
gunmanill
Дата 12.11.2011, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.11.2011

Репутация: нет
Всего: нет



Разбиение на модули вроде помогло, по крайней мере пошел видимый процесс компиляции. Однако один из модулей остался размером 250 мб, его никак не урезать. Самое печальное, что в итоге мне надо будет, чтобы код в 4 раза больше был, сейчас пока тестирую скомпилится или нет вообще. И тогда один из модулей будет не 250мб, а гиг.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.