Ответ 1
Когда я запускаю свой тест с выпуском сборки в VS 2010, я получаю результаты, похожие на то, на что можно надеяться:
EA 0.063000
Standard 0.073000
Однако, когда я запускаю ту же сборку релизов в отладчике VS, результаты резко меняются:
EA 1.293000
Standard 0.080000
И все это занимает еще больше (десятки секунд) для любой очистки объекта. Имейте в виду - это то же самое, что и сборка режима выпуска, а не сборка отладки.
Я не смотрел, почему EASTL сильно влияет на среду отладчика. Я предполагаю, что это имеет какое-то отношение к отладочной куче.
Обновление (4 марта 2015 года):
Другая деталь, которая влияет на результаты, - это длина задействованной строки. VS использует "оптимизацию коротких строк" в std::string
, что уменьшит количество распределений, которые возникают для строковых объектов, которые имеют значение, подобное "hello"
. Если вы измените инициализированное значение для строк, используемых в примере от "hello"
до "hello - but not too short"
, вы получите результаты, похожие на следующие:
// release build, run outside of the debugger
EA 0.078000
Standard 0.113000
// release build, run under the debugger
EA 0.762000
Standard 1.414000
И теперь становится очевидным, что различие в величине разницы при тестировании теста под отладчиком, скорее всего, связано с тем, что куча отладки тратит много времени на отслеживание распределения строк.