Версия STL оптимизирована для времени компиляции? - PullRequest
1 голос
/ 21 апреля 2010

Я ищу вариант STL (это нормально, если у него нет всей функциональности), который оптимизирован для коротких компиляций раз - меня беспокоит длительное время компиляции, которое задерживает мой цикл компиляции-отладки-редактирования.

Меня в основном интересуют контейнеры STL: вектор / карта, а не столько алгоритмы.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 21 апреля 2010

Посмотрите на параметры вашего компилятора для скомпилированных заголовков. В GCC , например, передача заголовка, как если бы он был источником, вызывает его прекомпиляцию.

Это значительно сократило время для моего маленького теста, но только если вы не посчитали время, потраченное на прекомпиляцию:

Shadow:code dkrauss$ ls maps*
maps.cpp    maps.h      maps2.cpp
Shadow:code dkrauss$ cat maps*
#include "maps.h"
using namespace std;

map<int,int> ints;
map<string, string> strings;
map<int, string> is;
map<string, int> si;

int main() {
bang(ints);
bang(strings);
bang(is);
bang(si);

extern void more();
more();
}
#include <string>
#include <map>

template< class K, class V >
void bang( std::map<K,V> &v ) {
v[ K() ] = V();
v.erase( v.begin() );
}

#include "maps.h"
using namespace std;

map<int,int> ints2;
map<string, string> strings2;
map<int, string> is2;
map<string, int> si2;

void more() {
bang(ints2);
bang(strings2);
bang(is2);
bang(si2);
}
Shadow:code dkrauss$ time g++ maps*.cpp -o maps

real    0m1.091s
user    0m0.857s
sys 0m0.132s
Shadow:code dkrauss$ time g++ maps.h

real    0m0.952s
user    0m0.406s
sys 0m0.110s
Shadow:code dkrauss$ ls maps*
maps        maps.cpp    maps.h      maps.h.gch  maps2.cpp
Shadow:code dkrauss$ time g++ maps*.cpp -o maps

real    0m0.718s
user    0m0.552s
sys 0m0.095s
Shadow:code dkrauss$ 
1 голос
/ 21 апреля 2010

Поскольку STL в значительной степени зависит от шаблонов, то, что вы действительно получите, это то, насколько быстро компилятор способен обрабатывать код на основе шаблонов. GCC повышает скорость компиляции кода шаблона с каждым новым выпуском, поэтому вы можете рассмотреть возможность обновления вашего компилятора. Если не считать этого, однако, вы мало что можете сделать, чтобы ускорить код на основе шаблонов. Некоторые другие флаги компиляции могут улучшить скорость сборки; Например, если пропустить флаг оптимизации, он будет компилироваться быстрее, а использование предварительно скомпилированных заголовков также может значительно ускорить компиляцию. Если у вас есть компьютер с несколькими ядрами, многие системы сборки поддерживают компиляцию параллельно (например, make использует флаг "-j", как в "-j 2", чтобы указать, сколько ядер). Я должен также указать, что вы платите только за то, что используете; если вы включите и

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

0 голосов
/ 21 апреля 2010

Купить более быстрый компьютер?:) Если серьезно, мы обнаружили, что шаблоны действительно поглощают время ссылки.Чтобы обойти это, мы оставляем только модули, которые в настоящее время отлаживаем, в режиме полной отладки (-o0).Другие модули мы компилируем до некоторого уровня оптимизации выше 0, который не генерирует почти столько же мертвого кода, чтобы компоновщик мог его разрешить.

0 голосов
/ 21 апреля 2010

Поскольку вас интересует только часть STL, рассматривали ли вы разветвление заголовочных файлов, чтобы неиспользованные материалы не были включены.

...