Повысить стоимость разымещения shared_ptr

Я пытаюсь сравнить производительность между необработанными указателями, повысить 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

13
задан Bart Janssens 2 November 2011 в 21:58
поделиться