2013-11-13 4 views
0

В следующей ссылке:Big O список сложности 8 байт против 16 байт

http://www.baptiste-wicht.com/2012/12/cpp-benchmark-vector-list-deque/

Если вы прокрутите вниз до раздела, где он сравнивает сорта он первым показывает результаты с типом данных 8 байт , сравнивая список, вектор и deque. Для типа данных 8 байтов (и 128 байтов) список намного медленнее, чем вектор и deque. Однако в нижней части сортировки он использует 16-байтовый тип данных, и внезапно список быстрее.

Как список может быть медленнее для 8 и 128 байтов, но быстрее для значения между (например, 16 байт)?

EDIT: Я заметил тот же шаблон в разделе random_insert. Список медленнее, чем вектор и deque для 8-байтовых и 32-байтовых типов данных, но МНОГО быстрее для 16 байт?

ответ

2

Обратите внимание, что тип данных 16 байт не является «тривиальным 16 байтами типа данных», он утверждает, что:

Тип нетривиальных данных состоит из двух длинных и очень глупого оператор назначения и конструктор копирования, который просто выполняет некоторую математику (совершенно бессмысленный, но дорогостоящий). Можно утверждать, что это не общий конструктор копирования , ни общий оператор присваивания, а один будет справа, однако важным моментом здесь является то, что для этого эталона достаточно для операторов .

Таким образом, это не имеет ничего общего с 16 байтами, являющимися магическим числом, которое делает список медленным, но его о перегрузке оператора на нетривиальном типе, который заставляет его идти медленно.

+1

Извините, я настолько поглощен всем, что полностью забыл (что я прочитал) – user997112

Смежные вопросы