Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
#1

Разница в быстродействии версий С++ - C++

16.04.2013, 21:10. Просмотров 258. Ответов 4

Добрый день.
Сейчас проделывал некий опус на liveworkspace и получил поразившие меня результаты.
Сей код...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
template <class fType, class sType>
class Pair {
   public:
   
   Pair() { }
   ~Pair() { }
   Pair(fType& _first, sType& _second) {
      first = _first;
      second = _second;
   }
   
   template <fType, sType>
   friend ostream& operator<<(ostream& out, Pair <fType, sType>& obj);   
   template <fType, sType>
   friend istream& operator>>(istream& in, Pair <fType, sType>& obj);
   
   fType first;
   sType second;
};
 
template <class fType, class sType>
Pair<fType, sType> makePair(fType _first, sType _second) {
   return Pair <fType, sType> (_first, _second);
}
 
template <class fType, class sType>
ostream& operator<<(ostream& out, Pair <fType, sType>& obj) {
   out << obj.first << " " << obj.second;
   return obj;
}
   
template <class fType, class sType>
istream& operator>>(istream& in, Pair <fType, sType>& obj) {
   in >> obj.first >> obj.second;
   return in;
}
 
int main()
{
   Pair <int, int> p[100000001];
   for(int i=1; i <= 100000000; i++)
      p[i] = makePair(i, i+100);
   //system("pause");
   return 0;
}
...запускал для "С++: 4.8.0 (g++)" и "C++: 4.6.3 (g++)".
В первом случае время около 0.12, во втором - не выше 0.04...
Объяснить это себе я никак не смог. Тем более, что для "C++: 4.6.4 (g++)" время снова около 0.12...
Быть может, дело не в совсем объективном замере времени...
Аргументы компилятора во всех случаях одинаковы: "-std=c++0x -Wall -W -pedantic -O2".
Хотелось бы понять, в чем дело. Спасибо.
P.S. буду признателен и за помощь в отношении того, как можно ускорить код за счет исключительно языковых средств.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2013, 21:10     Разница в быстродействии версий С++
Посмотрите здесь:

В чем разница? C++
Какая из версий c\c++ совметима с windows 7 C++
Использование Express версий C++
разница с и с++ C++
C++ В чем разница
Различия компиляции Degug и Release версий C++
Загрузка разных версий bmp в текстуру C++
Контроль версий C++
Какая разница? C++
C++ Ошибка из-за разных версий VS или "Как вытащить работающий код из проекта"
C++ Visual Studio конфликт версий
C++ как установить две одникаовые visual studio но разных версий?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
16.04.2013, 21:21     Разница в быстродействии версий С++ #2
1. делать замеры времени на LWS вообще не советую, причин тут много начиная с того, что ты не знаешь каким образом замеряется время и заканчивая тем, что кроме твоей программы может быть запущенно еще 1000 других.
2. компилятор может смело сократить этот код до
C++
1
2
3
4
int main()
{
    return 0;
}
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
16.04.2013, 21:47  [ТС]     Разница в быстродействии версий С++ #3
я полагаю, что процесс замера не связан с конкретным компилятором никак. что касается 1000 параллельных программ - это опять же не влияет на конкретный компилятор, и запуск я производил многократн. а вот идея насчет сокращения кода - отличный вариант... Если быть уверенным, что это реально.
Kastaneda
Форумчанин
Эксперт С++
4263 / 2795 / 219
Регистрация: 12.12.2009
Сообщений: 7,122
Записей в блоге: 1
Завершенные тесты: 1
16.04.2013, 21:56     Разница в быстродействии версий С++ #4
Цитата Сообщение от salam Посмотреть сообщение
Если быть уверенным, что это реально.
Проверил, так оно и есть
Assembler
1
2
    xorl    %eax, %eax
    ret
добавь ключ -S, в выводе будет ассемблерный листинг.
diagon
Higher
1922 / 1188 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.04.2013, 23:36     Разница в быстродействии версий С++ #5
4.8.0 таки действительно мощная штука.
Я как-то писал токенайзер плюсового кода, то есть не совсем сферического коня в вакууме. Оптимизировать там вроде как нечего было. Но при переходе с 4.7.2 на 4.8.0 скорость возросла в ~5 раз.
Есть, правда, предположение, что оно заинлайнило все мои коллбэки(которых дофига на каждый байт введенного текста) за счет более мощного lto.
Yandex
Объявления
16.04.2013, 23:36     Разница в быстродействии версий С++
Ответ Создать тему
Опции темы

Текущее время: 10:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru