mental.cat's blog

By mental.cat, history, 9 years ago, In Russian

Всем привет.

Я сижу под линем и занимаюсь спортивным программированием. Причем задачки я решаю на C++, который, как известно, наиболее удобен для этой цели. И я заметил, что G++ компилит мой source.cpp... Хм, не очень быстро. Если что, я пишу в Eclipse CDT на моем ноутбуке. Итак, я пробую скомпилировать такую прогу:

#include <iostream>

using namespace std;

int main()
{
	long long a, b;
	cin >> a >> b;
	cout << a + b;

	return 0;
}

И это компилится за 0.5 с (вроде быстренько).

Теперь уберем iostream, а вместо нее добавим bits/stdc++.h, который, как известно, подключает все разом. Получаем такой код:

#include <bits/stdc++.h>

using namespace std;

int main()
{
	long long a, b;
	cin >> a >> b;
	cout << a + b;

	return 0;
}

И он компилится уже 1.2 секунды за счет bits/stdc++.h. Ок. Теперь ставим компилятору флаг -std=c++11 (все-таки одиннадцатые плюсы есть за что любить), код оставляем тем же. Компилим, видим результат: 3.7 секунды. Ну... Это уже не 0.5, да и вообще следует заметить, что 3.7 секунды — это лучший результат. Более крупные коды будут компилится от 4 до 6 секунд. Это уже точно не 0.5 секунды.

Почему это критично? Потому что две компиляции кода — это уже в среднем 10 секунд. Три компиляции — 15 потерянных секунд. Для контеста, где плюс-минус минута играет роль, это критично. Я видел, что у некоторых участников компиляция при тех же флагах на примерно таком же железе занимает 1-2 секунды.

Мой вопрос сообществу звучит просто. Можно ли как-то ускорить компиляцию C++11 с помощью G++? Я думаю, это поможет не только мне.

  • Vote: I like it
  • +53
  • Vote: I do not like it