Сравнительный анализ компиляторов С++ - Тестирование 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 оказался на первом месте.