Russian Qt Forum

Программирование => С/C++ => Тема начата: _govorilka от Марта 17, 2007, 07:29



Название: Компиляторы C++
Отправлено: _govorilka от Марта 17, 2007, 07:29
Хотелось бы обсудить: каким компилятором лучше компилить проги на C++?

Вот мое мнение:
Под винду - Мне нравится Microsoft С++ 7.1 или Intel C++ 8.0 Intel C++ 9.0 под винду глючит, да и VS интеграции нет. Intel C++ 9.1 еще не видел, Microsoft С++ 8.0 - сам компилятор нормальный, но система манифестов - полный идиотизм!!! То что есть от Borland, и есть от Borland (Это переделанные Паскали!!!). У MinGW есть только одно достоинство - бесплатный, по всем остальным параметрам говно!

Под Linux, мне кажется, что лучший - это Intel C++ 9.0, хотя у меня была возможность сравнить только с gcc, может у кого есть что-то другое. Так же как и в винде у gcc есть только одно достоинство - бесплатный!!! Для Linux на Intel C++ можно компилировать и Qt Open Source!!!

Под Mac - ??? (не разу просто проги под Mac не писал).


Название: Компиляторы C++
Отправлено: Mr. Пронька от Марта 17, 2007, 09:38
Если участники дискуссии ни чем не подкрепят свои доводы, то тема превратится в банальный holy war.


Название: Re: Компиляторы C++
Отправлено: QCasper от Марта 17, 2007, 11:52
Цитата: "_govorilka"

Под винду - Мне нравится Microsoft С++ 7.1. У MinGW есть только одно достоинство - бесплатный, по всем остальным параметрам говно!


Microsoft С++ 7.1 - компилятор тоже бесплатный


Название: Re: Компиляторы C++
Отправлено: f_evgeny от Марта 17, 2007, 12:20
Цитата: "_govorilka"
Хотелось бы обсудить: каким компилятором лучше компилить проги на C++?

Вот мое мнение:
Под винду - Мне нравится Microsoft С++ 7.1 или Intel C++ 8.0 Intel C++ 9.0 под винду глючит, да и VS интеграции нет. Intel C++ 9.1 еще не видел, Microsoft С++ 8.0 - сам компилятор нормальный, но система манифестов - полный идиотизм!!! То что есть от Borland, и есть от Borland (Это переделанные Паскали!!!). У MinGW есть только одно достоинство - бесплатный, по всем остальным параметрам говно!

Под Linux, мне кажется, что лучший - это Intel C++ 9.0, хотя у меня была возможность сравнить только с gcc, может у кого есть что-то другое. Так же как и в винде у gcc есть только одно достоинство - бесплатный!!! Для Linux на Intel C++ можно компилировать и Qt Open Source!!!

Под Mac - ??? (не разу просто проги под Mac не писал).

Так все-таки какие параметры имеются в виду?


Название: Компиляторы C++
Отправлено: evilguard от Марта 17, 2007, 12:47
А 8 мелкософтовский компилер тоже бесплатный? Вроде тоже есть VS Express Edition 2005. И встанет ли на нее интегратор?


Название: Re: Компиляторы C++
Отправлено: vregess от Марта 17, 2007, 12:50
Цитата: "_govorilka"
Хотелось бы обсудить: каким компилятором лучше компилить проги на C++?

Вот мое мнение:
....
MinGW есть только одно достоинство - бесплатный, по всем остальным параметрам говно!
...
Так же как и в винде у gcc есть только одно достоинство - бесплатный!!!


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

Вот смотрю я описание функции qVariantValue
Цитировать

T qVariantValue ( const QVariant & value )

Returns the given value converted to the template type T.
This function is equivalent to QVariant::value<T>(value). It is provided as a work-around for MSVC 6, which doesn't support member template functions.

Хотя это они про MSVC 6 говорят...

В любом случае под такими высказываниями (да еще и с воскл. знаками) надо как минимум три раза ставить ИМХО.

Чем же тебе так не угодил гнутый компиллер??
От тебя что, девушка сбежала из-за него?!

По поводу того, "каким компилятором лучше компилить проги на C++",
то все зависит от окружающих условий. Ну там ОС и т.п.

Ты уже, кстати, сам ответил на свой вопрос, судя по твоим пристрастиям)


Название: Re: Компиляторы C++
Отправлено: troorl от Марта 17, 2007, 15:34
Цитата: "_govorilka"
Хотелось бы обсудить: каким компилятором лучше компилить проги на C++?

Вот мое мнение:
Под винду - Мне нравится Microsoft С++ 7.1 или Intel C++ 8.0 Intel C++ 9.0 под винду глючит, да и VS интеграции нет. Intel C++ 9.1 еще не видел, Microsoft С++ 8.0 - сам компилятор нормальный, но система манифестов - полный идиотизм!!! То что есть от Borland, и есть от Borland (Это переделанные Паскали!!!). У MinGW есть только одно достоинство - бесплатный, по всем остальным параметрам говно!

Под Linux, мне кажется, что лучший - это Intel C++ 9.0, хотя у меня была возможность сравнить только с gcc, может у кого есть что-то другое. Так же как и в винде у gcc есть только одно достоинство - бесплатный!!! Для Linux на Intel C++ можно компилировать и Qt Open Source!!!

Под Mac - ??? (не разу просто проги под Mac не писал).

Я увижу хоть один аргумент, подтвержающий твои вопли?


Название: Re: Компиляторы C++
Отправлено: _govorilka от Марта 17, 2007, 18:21
Спасибо, что не мне обному интересна эта тема.
От компилятора многое зависит. Например, тут тему подымали о размере *.exe,
вот этот самый размер напрямую зависит от компилятора.

Под windows для сравнения я взял небольшую программу (создает простое окно посредством
функций из WinAPI), этакий GUI Hello World и вот какой размер exe у меня получился:

MC++ 7.1 - 180Kb
MC++ 8.0 - 65Kb (мне кажется, из-за того, что CRT и API теперь грузятся динамически).
IC++ 8.0 - 185Kb
IC++ 9.0 - 190Kb
MinGW 3.4.2 - 420Kb

Хочется услышать мнение других, их тесты и результаты сравнений. Особенно под Linux и Mac.

Цитата: "f_evgeny"
... Так все-таки какие параметры имеются в виду?


Оптимизация кода (скорость работы и размер бинарника, объем выделяемой памяти и т.д.),
поддержка языка C++, удобство и скорость работы и т.д. Любые критерии по которым можно
сравнить два и более компилятора.

Вот, что нашел в Google...
http://www.cyberguru.ru/programming/cpp/cpp-compilers-analysis.html


Название: Компиляторы C++
Отправлено: troorl от Марта 17, 2007, 18:26
_govorilka
У GCC (MinGW) есть параметры по умолчанию, равно как и у других компиляторов. Прежде чем делать такие "тестирования" неплохо было бы с ними ознакомиться.


Название: Компиляторы C++
Отправлено: zabivator от Марта 17, 2007, 20:15
_govorilka спасибо, очень актуальная тема, статья на которую ты дал ссылку великолепна.


Название: Re: Компиляторы C++
Отправлено: pastor от Марта 17, 2007, 20:41
Цитата: "_govorilka"

Под windows для сравнения я взял небольшую программу (создает простое окно посредством
функций из WinAPI), этакий GUI Hello World и вот какой размер exe у меня получился:


Приведи пожалуйста конфигурацию и версию Qt


Название: Компиляторы C++
Отправлено: Mr. Пронька от Марта 17, 2007, 21:40
Странные размеры exe-шников. Взять тот же Code::Blocks, который может создавать WinAPI приложения. Создаём в нём такую программульку и компилим. Экзешник получается где-то 19-20 килобайт, а в оперативке вообще 1900 байт занимает. + runtime MinGW - 15 кило на данный момент.

добавлено спустя 47 минут:

 А в статейке какой-то не актуальный тест...


Название: Re: Компиляторы C++
Отправлено: SLiDER от Марта 18, 2007, 03:10
Цитата: "_govorilka"
У MinGW есть только одно достоинство - бесплатный, по всем остальным параметрам говно!


Хотелось бы  напомнить блаародному дону, что в первую очередь он СВОБОДНЫЙ, а уже потом бесплатный, под виндой ТАКИМ достоинством не может похвастаться ни один компилятор для C/C++. Да и не такое уж он говно, вы просто не умеете его готовить.

Цитата: "_govorilka"
Так же как и в винде у gcc есть только одно достоинство - бесплатный!!!


На счет бесплатный см. выше, а в остальном вы бредите, в подавляющем большинстве случаев GCC генерирует код не сильно уступающий коду гененрируемому ICC, и при этом не только для интеловских процессоров. Или вам напомнить историю одного иска поданного в американский суд компанией AMD против Intel?


Название: Re: Компиляторы C++
Отправлено: zabivator от Марта 18, 2007, 11:04
Цитата: "SLiDER"
Или вам напомнить историю одного иска поданного в американский суд компанией AMD против Intel?

Вот это очнеь интересно.
Напомните, пожалуйста.


Название: Re: Компиляторы C++
Отправлено: _govorilka от Марта 18, 2007, 11:56
Цитата: "zabivator"
_govorilka спасибо, очень актуальная тема, статья на которую ты дал ссылку великолепна.


Спасибо, за поддержку!!!

Цитата: "pastor"
Цитата: "_govorilka"

Под windows для сравнения я взял небольшую программу (создает простое окно посредством функций из WinAPI), этакий GUI Hello World и вот какой размер exe у меня получился:


Приведи пожалуйста конфигурацию и версию Qt


Версии компиляторов, я указал, в конфигурации и настройках я ничего не менял. Для WinApi приложений  - версия Qt 0.0.0   :)

Цитата: "Mr. Пронька"
... А в статейке какой-то не актуальный тест...


Поэтому и создал эту тему на форуме. Большинство статей по этой теме очень давно написаны, а новых практически не выходит.

Цитата: "SLiDER"
...Да и не такое уж он говно, вы просто не умеете его готовить.

А разве человек, который 5 лет работает с VS, может сам готовить компилятор?..
Вот поэтой причине многие и выбирают MC++ (он завернут в среду, которая сама все нашинкует и приготовит, а потом еще и на терелочку положит).
Если есть ссылка на статью о том, как настраивать GCC дайте, буду очень благодарен.


Название: Компиляторы C++
Отправлено: evilguard от Марта 18, 2007, 12:08
В тесте приведено сравнение stl разных компиляторов. Было бы интересно вместо компиляторов сравнить по такой же методике stl, входящей в состав компилятора(любого) и stl от троллей.


Название: Компиляторы C++
Отправлено: _govorilka от Марта 18, 2007, 12:23
Цитата: "evilguard"
В тесте приведено сравнение stl разных компиляторов. Было бы интересно вместо компиляторов сравнить по такой же методике stl, входящей в состав компилятора(любого) и stl от троллей.


Надо попробывать...


Название: Компиляторы C++
Отправлено: SLiDER от Марта 18, 2007, 15:58
Цитата: "zabivator"
Цитата: "SLiDER"
Или вам напомнить историю одного иска поданного в американский суд компанией AMD против Intel?

Вот это очнеь интересно.
Напомните, пожалуйста.


Легко, например здесь -> http://www.rol.ru/news/it/news/05/06/29_003.htm, где-то была статейка и по подробнее, google вам в руки.  8)

добавлено спустя 3 минуты:

 О, а вот и еще.

http://www.securitylab.ru/news/215751.php


Название: Компиляторы C++
Отправлено: troorl от Марта 18, 2007, 16:07
Цитировать
А разве человек, который 5 лет работает с VS, может сам готовить компилятор?..
Вот поэтой причине многие и выбирают MC++ (он завернут в среду, которая сама все нашинкует и приготовит, а потом еще и на терелочку положит).
Если есть ссылка на статью о том, как настраивать GCC дайте, буду очень благодарен.

Он и код за вас пишет? Интересные у нас программисты, которые за пять лет работы даже не подумали поковырять настройки компилятора...


Название: Re: Компиляторы C++
Отправлено: SLiDER от Марта 18, 2007, 16:07
Цитата: "_govorilka"
Цитата: "SLiDER"
...Да и не такое уж он говно, вы просто не умеете его готовить.

А разве человек, который 5 лет работает с VS, может сам готовить компилятор?..
Вот поэтой причине многие и выбирают MC++ (он завернут в среду, которая сама все нашинкует и приготовит, а потом еще и на терелочку положит).
Если есть ссылка на статью о том, как настраивать GCC дайте, буду очень благодарен.


В данном случае лучшей статьей я считаю документацию на компилятор, ну или книжки на ту же тему (на ozon.ru посмотрите), а еще можно пройтись google-ом с такой поисковой фразой -> "оптимизация GCC", результат будет такой
Цитата: "google.com"
Результаты 1 - 10 из примерно 91 100 для оптимизация GCC. (0,12 секунд)


Название: Re: Компиляторы C++
Отправлено: pastor от Марта 18, 2007, 17:41
Цитата: "_govorilka"

Версии компиляторов, я указал, в конфигурации и настройках я ничего не менял. Для WinApi приложений  - версия Qt 0.0.0   :)


Не обратил я внимание на то, что приложения ты написал на WinApi )))
Размер тока получился шото великоват. Выложи исходники, я у себя попробую собрать.


Название: Re: Компиляторы C++
Отправлено: vregess от Марта 19, 2007, 09:58
Цитата: "_govorilka"

А разве человек, который 5 лет работает с VS, может сам готовить компилятор?..
Вот поэтой причине многие и выбирают MC++ (он завернут в среду, которая сама все нашинкует и приготовит, а потом еще и на терелочку положит).

... и плюнет в тарелочку.
Откуда мы знаем что он там накомпилировал?
Мож он туда свой код вставил а-ля "пасхальное яйцо"...
Вот мысль такая пришла: может все скрытые и ненужные приколы в виндовых приложениях не программисты наделали, а ms компиллер понасувал? )
Цитата: "_govorilka"

Если есть ссылка на статью о том, как настраивать GCC дайте, буду очень благодарен.

например man gcc - снего можно начать.
можно полазить на гентушных форумах - там про оптимизацию кода есть точно, сам читал. gentoo.org - вроде такой адрес, давно не интересовался. flying with gentoo - так вроде тема называлась


Название: Компиляторы C++
Отправлено: sector от Марта 19, 2007, 10:41
Народ!!! Вся эта тема из серии "поцелуй меня в плече! - а зачем?? - ну ты ведь тоже из далека начал"))) Все что мона предоставляет gcc и mingw меня они полностью удовлетворяют... а если чел не видел никогда настроек?? я не понимаю зачем поднимать подобный вопрос!!! Вообщем стыдно товарищььь!!! GCC forever!!! ))) ну или кому что нравиться)))


Название: Компиляторы C++
Отправлено: Вудруф от Марта 20, 2007, 11:36
Во-первых, strip вам в руки, и будет размер бинарника значительно меньше.
Во-вторых, когда я тестировал GCC vs MS VS 6.0 (давно было), то у меня код VS работал быстрее. А потом я нашёл -O3 :) Думаю, не стоит говорить, что у VS оптимизация по умолчанию включена.
Нормальной поддержки кода
Код:

for (int i = 0; i < 5; ++i)
  //...
for (int i = 0; i < 5; ++i)

не было и в VS 7 (дальше я уже не пользовал).

И, наконец, у меня в linux'е GCC работает быстрее, чем в винде. К тому же у меня процессор от AMD, а тот же ICC только для Intel рулит...

Поддержка стандарта - тоже важный момент. В GCC сейчас нет экспортируемых шаблонов (так их вообще ещё нигде толком нет), но в остальном она стандарт поддерживает наиболее полно.
Куча настроек, позволяющих сильно влиять на процесс компиляции.
GPL для компилятора и LGPL для библиотек - это существенный плюс.

Мне как то раз парень сказал - GCC говно, программа в три раза медленнее работает. После чего я спросил: "А какие флаги оптимизации? Как компилил?" Ответ: "g++ myprog.cpp -c". Сразу всё стало понятно.
Ещё нужно смотреть качество стандартной библиотеки.

P.S. А вообще, это действительно holy war: MS vs FSF


Название: Компиляторы C++
Отправлено: evilguard от Марта 20, 2007, 13:40
Цитата: "Вудруф"
Ещё нужно смотреть качество стандартной библиотеки.

Я уже тут задавал вопрос - а хороша ли реализация stl(контейнеров, строк) от троллей.
И какие ключи оптимизации для gcc? -O3 ?


Название: Компиляторы C++
Отправлено: vregess от Марта 20, 2007, 13:53
По теме:
http://www.rsdn.ru/article/devtools/devtools.xml

и посе этого GCC/mingw - говно?


Название: Компиляторы C++
Отправлено: Alex Forth от Марта 20, 2007, 15:06
Цитата: "vregess"
По теме:
http://www.rsdn.ru/article/devtools/devtools.xml

и посе этого GCC/mingw - говно?

Статейка довольно жиденькая  :x
Кто хочет разобраться в кодогенерации - читайте Криса Касперского "Фундаментальные основы хакерства"


Название: Компиляторы C++
Отправлено: vregess от Марта 20, 2007, 22:25
Цитата: "Alex Forth"
Цитата: "vregess"
По теме:
http://www.rsdn.ru/article/devtools/devtools.xml

и посе этого GCC/mingw - говно?

Статейка довольно жиденькая  :x
Кто хочет разобраться в кодогенерации - читайте Криса Касперского "Фундаментальные основы хакерства"


Дело совсем не в кодогенерации...  :x
В смысле, не совсем в кодогенерации.


Название: Компиляторы C++
Отправлено: _govorilka от Марта 21, 2007, 04:32
Цитата: "evilguard"
...Я уже тут задавал вопрос - а хороша ли реализация stl(контейнеров, строк) от троллей...


Стандартные контенеры (QList, QVector, QStack и т.д.) работают быстрее, чем стандартные (stl::list, stl::vector). Вот маленький пример кода (не думаю что тролли оптимизировали QTime под свои контенеры):

Код:
#include <QtCore/QCoreApplication>
#include <QTime>
#include <QList>
#include <list>

#define IS_STL

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTime stopwatch;
    stopwatch.start();
   
#ifdef IS_STL
 
    std::list<int> list;
    for(int i = 0; i < 10000000; i++){
      list.push_back(i);  
    }  

#else
   
    QList<int> testList;
    for(int i = 0; i < 10000000; i++){
      testList.append(i);  
    }

#endif
   
    printf("%d\n", stopwatch.elapsed());
    return a.exec();
}


добавлено спустя 28 минут:

 
Цитата: "vregess"
По теме:
http://www.rsdn.ru/article/devtools/devtools.xml

и посе этого GCC/mingw - говно?


Спасибо, за интересную ссылку.


Название: Компиляторы C++
Отправлено: Alex03 от Марта 21, 2007, 07:06
Цитата: "_govorilka"

Стандартные контенеры (QList, QVector, QStack и т.д.) работают быстрее, чем стандартные (stl::list, stl::vector). Вот маленький пример кода ...


Если с контейнерами от тролей всё ясно, то понятие "стандартные (stl::list, stl::vector)" уж очень абстрактное. Реализаций море. Хоть бы ОС, компиллер, либы упомянули.


Название: Компиляторы C++
Отправлено: Вудруф от Марта 21, 2007, 10:58
Код:

#include <iostream>
#include <vector>

#include <cstdlib>

#include <QVector>

int main(int argc, char *argv[])
{
time_t t1, t2;

std::time (&t1);
for (int i = 0; i < 10000; ++i)
{
std::vector<int> stdList;
for (int i = 0; i < 100000; i++)
stdList.push_back(i);
}
std::time (&t2);

std::cout << "STD: " << t2 - t1 << '\n';

std::time (&t1);
for (int i = 0; i < 10000; ++i)
{
QVector<int> qtList;
for (int i = 0; i < 100000; i++)
qtList.append(i);
}
std::time (&t2);

std::cout << "Qt: " << t2 - t1 << '\n';
}


Вывод:
STD: 25
Qt: 36

Компилятор: GCC (MinGW) 3.4.5
Опции: -O3

Два цикла для того, чтобы не выделять много памяти.
Я не запускал программу в предложенном виде, а комментировал всё, относящееся к QVector или к std::vector в зависимости от теста.

По памяти:
Пик для STD - 1648 Кб
Пик для Qt - 2212 Кб

Для списка (list):
Время:
STD: 945
Qt: 38 (!)
Память:
Пик для STD - 3140 Кб
Пик для Qt - 2200 Кб

Странные результаты, такое ощущение, что QList - это не полноценный список, а дек (в том виде как он представлен в STD).
В assistant видим: "It stores a list of values and provides fast index-based access as well as fast insertions and removals.", что в какой-то мере подтверждает наши выводы.
Для дека (std::deque):
Время: 16 (!)
Память: 1192 Кб (!)

А ведь список - это контейнер, ориентированный на быструю вставку элемента в произвольное место. Проверим время вставки в произвольное место.
Вставляем в конец три элемента, запоминаем итератор, вставляем ещё один элемент, а затем вставляем много элементов перед итератором:
Время:
STD: 9
Qt: <1
std::deque: 2

Подозрения не подтвердились. QList отлично обрабатывает вставку в произвольное место. На досуге покопаюсь в исходниках Qt и посмотрю, как он реализован.

Вывод: контейнеры STD работают не хуже контейнеров Qt. Более того, только для использования контейнеров не имеет смысл тащить за собой QtCore. STL весит значительно меньше.
С другой стороны QList работает быстрее, чем std::list...
С использованием reserve тесты для векторов становятся неинтересными. Равно как нет смысла проверять скорость обращения к элементам для тех же векторов.
По идее надо было бы тесты сделать более обширными, посмотреть также QMap и std::map, но лениво... Пока что покопаюсь в исходниках.
Возможно, падение производительности связано с гарантиями операций, можно и в эту сторону копнуть.


Название: Компиляторы C++
Отправлено: pastor от Марта 21, 2007, 14:16
Воспользовавшись примером _govorilka, провел тесты с некоторыми контейнерами Qt - QMap, QList, QLinkedList, QVector и STL - std::map, std::list, std::vector. Результаты получиличь следующие:

               
Код:
           std::list        QList

append:      2100            330
prepend:     2100            450
insert:      47              8700


ЗЫ: В тесте на insert вставка производилась после 1 элемента. Кол-во итераций ученьшено в 100 раз.

                 
Код:
          std::list        QLinkedList

append:      2100               1970
prepend:     2100               2000
insert:      2100               2100


                 
Код:
            std::vector            QVector

append:        235                  330
prepend:        -                   8700
insert:         -                   8700


ЗЫ: В тесте на insert вставка производилась после 1 элемента. В двух последних тестах кол-во итераций ученьшено в 100 раз.

                           
Код:
               std::map              QMap

add new item:    750                 550


ЗЫ: Кол-во итераций ученьшено в 10 раз.



Qt 4.2.2, VS2005, Приложения собраны в Release


Название: Компиляторы C++
Отправлено: Dendy от Марта 21, 2007, 20:13
Всё нужно использовать там, для чего оно предназначено.
Большинство операций со списком связаны с добавлением/удалением в начало и конец. Для этих случаев используется QList, который внутри представляет собой цепочку массивов. Результаты - сами видите. Очень нужный контейнер, со внутренней структурой, которой нет аналогов по оптимизации скорости работы.
В единицах случаев, когда нужно вставлять/удалять элементы всередине списка, причём гораздо чаще, чем простое наполнение списка - используется QLinkedList, элементы которого хранят ссылки на следующий и предыдущий. Фактически - это аналог std::list.
Ну и с вектором всё понятно. Этот класс нужен для обращения к цельному куску памяти, выделенной заранее. Если и происходит изменение его размера - то очень редко. Соответственно вышеприведённый тест не имеет смысла, разве что чтобы ещё раз убедиться в необходимости грамотного подхода к выбору контейнера.


Название: Компиляторы C++
Отправлено: pastor от Марта 21, 2007, 20:34
Цитата: "Dendy"
Соответственно вышеприведённый тест не имеет смысла, разве что чтобы ещё раз убедиться в необходимости грамотного подхода к выбору контейнера.


Именно для этого и преведены тесты, чтобы видеть разницу между контейнерами, как Qt так и STL, ну и между собой соответственно


Название: Компиляторы C++
Отправлено: evilguard от Марта 21, 2007, 21:59
То есть QList - аналог std::deque, а QLinkedList - std::list?


Название: Компиляторы C++
Отправлено: _govorilka от Марта 22, 2007, 04:15
Цитата: "Alex03"
...Если с контейнерами от тролей всё ясно, то понятие "стандартные (stl::list, stl::vector)" уж очень абстрактное. Реализаций море. Хоть бы ОС, компиллер, либы упомянули.

Вот, на чем проверял WinXPPro/MC++8.0 (либа стандартная), как проверял написано в исходнике. Если проверите под gcc, скажу вам огромное спасибо!!!
В Qt, как мне кажется, iterator'ы написаны удобнее, или просто к ним уже привык. По Qt контенерам есть справка, а по STL...


Название: Компиляторы C++
Отправлено: Вудруф от Марта 22, 2007, 08:41
По QVector: зачем разрешать явно неэффективные операции? Если такие операции нужны, то нужно использовать другой контейнер. Вот в std::vector insert нет, и это правильно.
Да, получается, что QList - аналог std::deque.
Кстати, логично, что у меня со вставкой результаты дурные получались. У меня перемещать надо было только два элемента, а не все. Вставка после первого элемента - более правильный тест.
Для std::vector push_back имеет смысл делать. При грамотном перераспределении памяти операция получается не накладной. Тут надо смотреть асимптотическую (в пределе) сложность операции. И тут QVector проигрывает.
Шутки ради ещё надо сравнить скорость поиска в std::map и QMap, скорость обращения к элементам в векторе и деке, а также скорость выполнения std::sort для... std::list и QLinkedList.

добавлено спустя 5 минут:

 
Цитировать
По Qt контенерам есть справка, а по STL...

А Google не рулит? Вот сходу ссылки нашёл:

http://www.sgi.com/tech/stl/
http://solarix.ru/for_developers/cpp/stl/stl.shtml
http://en.wikipedia.org/wiki/Standard_Template_Library

И книжка хорошая есть.
Nicolai M. Josuttis "C++ Standard Library, The: A Tutorial and Reference"


Название: Компиляторы C++
Отправлено: evilguard от Марта 22, 2007, 09:03
Я конечно точные тесты не проводил, но ради интереса модифицировал совю программу. В ней использовались объекты QPolygonF. Полигоны я заполнял точками по одной, с нуля, то есть изначально контейнер пустой и по ходу выполнения программы заполняется точками, причем как в конец - append, так и в начало - prepend. Посмотрел на здешние результаты, решил заменить QPolygon (который QVector<QPointF>) на QList<QPointF> - ожидал десятикратный прирост в операции prepend, а вместо этого общая скорость расчета увеличилась раза в 2.

добавлено спустя:

 еще раз проверил, в той част программы, где я ожидал прироста от prepend + QList, видимого прироста не обнаружил.
В другой части кода, где заметное падение производительности от использования QList - раньше я использовал конструктор QVector<QPointF> container(size). Для QList же выделение памяти блоком невозможно, поэтому наверное и такое падение скорости. Хотя точно не уверен.