Сравнительный анализ компиляторов С++ - Тестирование STL

ОГЛАВЛЕНИЕ

 

Тестирование STL

STL, как известно, входит в ISO стандарт C++ и содержит очень много полезного и превосходно реализованного кода, использование которого существенно облегчает жизнь программистам. Конечно, MCVC++, gcc и Builder используют различные реализации STL - и результаты тестирования будут сильно зависеть от эффективности реализации тех или иных алгоритмов, а не от качества самого компилятора. Но, так как STL входит в ISO-стандарт, тестирование этой библиотеки просто неотделимо от тестирования самого компилятора.

Проводилось тестирование только наиболее часто используемых классов STL: string, vector, map, sort. При тестировании string'а измерялась скорость конкатенации; для vector'а же - время добавления элемента (удаление не тестировалось, так как это просто тестирование realloc'а, которое будет проведено ниже); для map'а измерялось время добавления элемента и скорость поиска необходимого ключа; для sort'а - время сортировки. Так как Microsoft не рекомендует использовать STL в VC++, для сравнения было добавлено тестирование конкатенации строк на основе родного класса VC++ для работы со строками CString и, чтобы уж совсем никого не обидеть, то и родного класса Builder'а - AnsiString. Результаты, опять же, оказались очень даже интересными (см. табл. 2)

Таблица 2. Результаты тестирования STL
  VC++ Intel Compiler Bulder C++ MinGW (gcc)
string add 8 (572) 11 (837) 3 (244) 2 (199)
AnsiString - - 11 (832) -
Cstring 106 (7476) 104 (7331) - -
sort 157 (10994) 156 (10943) 387 (27132) 226 (15848)
vector insert 110 (77) 96 (67) 63 (44) 56 (39)
map insert 1311 (1836) 1455 (2037) 848 (1148) 448 (627)
map find 181 (127) 4 (3) 418 (293) 199 (139)

Согласно результатам, не рекомендованный STL string работает в 12 раз быстрее, чем родной CString Microsoft! Как тут в очередной раз не задуматься о практичности рекомендаций Microsoft... А вот просто потрясающий результат на поиске от Intel Compiler это результат оптимизации "ничего не делающего кода" - поиск как таковой он просто выбросил из конечного бинарного кода. Не менее интересен результат gcc - во всех тестах, связанных с выделением памяти, gcc оказался на первом месте.