Это хороший вопрос. Мы только что сделали много такого типа тестирования по очень маленькому фрагменту кода. По общему признанию, в UNIX, но принципы и проблемы там одинаковы.
Этот 32-разрядный результат VS2010 удивителен, но я буду размышлять о том, почему. Вместо этого запустите профайлер над кодом. Это покажет вам, где все это время предпринимается. Затем вы можете сравнить выходы на языке ассемблера из разных версий этой горячей точки, и ответ неизбежно выскочит.
И ответить на ваши два конкретных вопроса:
Timing гарантирует Если вы не можете контролировать спецификацию оборудования и другого программного обеспечения, запущенного на целевой системе, то нет никаких гарантий времени.
Временное отклонение от компилятора Время может варьироваться в зависимости от платформы, компилятора и версии компилятора. Однако, используя профилировщик, вы можете согласиться с тем, что критический по времени код у вас такой же хороший, как и для любой конкретной сборки.
Справочные материалы
- профилирование под Windows: http://msdn.microsoft.com/en-us/library/ms182372.aspx
- Документах по оптимизации C++ и ассемблер: http://www.agner.org/optimize/
- Пропустить первые 20 минут: https://www.youtube.com/watch?v=rX0ItVEVjHc Майк Актон показывает разницу в сборе языковые выходы между разными компиляторами и рассказывает о методах оптимизации.
Вы чистили и ремонтировали перед каждым испытанием? Перед всеми испытаниями оба VS2010 и VS2013 уже установлены? – Raptor
@Raptor Я попробовал очистить и перестроить, получилось аналогичные результаты. И, да, установлены VS2010 и VS2013. – herohuyongtao
Зависит от многих вещей, таких как код, который вы тестируете? Как выглядит вывод компилятора? Вы запустили его N раз и взяли среднее? И т. Д. – paulm