Я пытаюсь сравнить производительность между необработанными указателями, повысить shared_ptr и повысить weak_ptr. Что касается разыменования, я ожидал, что shared_ptr и raw_ptr будут равны, но результаты показывают, что shared_ptr примерно в два раза медленнее. Для теста я создаю массив с указателями или общими указателями на ints, а затем разыменовываю в цикле, подобном этому:
int result;
for(int i = 0; i != 100; ++i)
{
for(int i = 0; i != SIZE; ++i)
result += *array[i];
}
Полный код для теста можно найти здесь: https://github.com/coolfluid/coolfluid3/blob/master/test/common/utest-ptr-benchmark.cpp
Время тестирования оптимизированной сборки без утверждений можно найти здесь: http://coolfluidsrv.vki.ac.be/cdash/testDetails.php?test=145592&build=7777
Значениями интереса являются "DerefShared time" и "DerefRaw time"
Я думаю, что тест может быть каким-то образом ошибочным, но я не смог понять, откуда берется разница. Профилирование показывает оператору* из shared_ptr вклинивается, просто кажется, что это занимает больше времени. Я дважды проверил, что утверждение о повышении выключено.
Я был бы очень признателен, если бы кто-нибудь мог объяснить, откуда может исходить разница.
Дополнительный автономный тест: https://gist.github.com/1335014