EASTL против STL, как может быть такая разница в производительности в std :: vector <uint64_t> :: operator [] - PullRequest
13 голосов
/ 21 апреля 2011

Согласно http://www.open -std.org / jtc1 / sc22 / wg21 / docs / paper / 2007 / n2271.html vector<uint64>::operator[] на 2% и 70% быстрее в EASTL, чемчасто используемая коммерческая версия STL ".

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

Обновление:

Кажется, ответ заключается в том, что инженеры EA просто обманывают, сравнивая с версией, которая использует проверку диапазона ...

Ответы [ 2 ]

8 голосов
/ 21 апреля 2011

В документе говорится, что они использовали VC ++ 2005 для тестирования Windows, при котором проверенные итераторы по умолчанию включены (да, даже для сборок релиза; то же самое касается VC ++ 2008). Я подозреваю, что производительность operator[] не изменилась бы, если бы они добавили -D_SECURE_SCL=0 в командную строку сборки.

4 голосов
/ 21 апреля 2011

Я думаю, что этот отрывок из документации будет иметь решающее значение

http://www.open -std.org / jtc1 / sc22 / wg21 / docs / documents / 2007 / n2271.html # eastl_allocator

Это, по-видимому, вдохновлено знаменитой статьей «На пути к лучшей модели распределителя» Пабло Халперна

...