std :: vector быстрее, чем простой массив?

Я только что попытался протестировать std :: sort на обоих std :: vector > (заполнено операцией push_back) и простой std :: pair > * массив (выделенный с использованием новых и затем заполнялись один за другим). Функция сравнения просто сравнивала части пар с плавающей запятой.

Удивительно, но при использовании со значениями 16M на std :: vector это заняло всего около 1940 мс, а для массива - около 2190 мс . Кто-нибудь может объяснить, как вектор может быть быстрее? Это из-за кеширования, или просто массивная версия std :: sort плохо реализована?

gcc (GCC) 4.4.5 20110214 (Red Hat 4.4.5-6)

Intel (R) Core (TM) i7 CPU 870 @ 2,93 ГГц - размер кэша 8192 КБ (компьютер имеет два четырехъядерных процессора, но я предполагаю, что сортировка будет только однопоточной)

EDIT: Теперь вы можете называть меня тупицей, но когда я попытался воспроизвести код, который использовал для измерений (я уже удалил исходный) Я не могу воспроизвести результаты - теперь версия массива занимает около 1915 + - 5 мсек (измерено на 32 прогонах). Могу только поклясться, что я провел тест на 10 измерениях три раза (вручную) с аналогичными результатами, но это не является строгим доказательством.

Вероятно, в исходном коде была какая-то ошибка, фоновый процесс кажется маловероятным, потому что я чередовал измерения версий векторов и массивов, а также результаты векторов сохраняются, и ни один пользователь не вошел в систему.

Пожалуйста, считайте этот вопрос закрытым . Спасибо за ваши усилия.

6
задан Radim Vansa 16 June 2011 в 18:52
поделиться