Deleted Account
дада
Daniil
Класс, не знал
IharOK
а, ну если не самописная функция то да...
Deleted Account
это лучше чем бестолковые приведения типов, и Qunused
Daniil
IharOK
Stanislav
Deleted Account
Mikhail
В общем. И вектор, и список лежат в памяти. Вектор — последовательно, а лист — не всегда, у каждой вершинки есть указатель на следующую и он может указывать на другой участок памяти
Просто когда процессор хочет посчитать, например, ту же сумму чисел в кеш отправляется целый кешлайн, например, 64 байта. Он берет первую чиселку, кладет в аккумулятор. Идет за второй, а она такая — оп, тоже есть в кешлайне, за ней не надо идти в оперативную память по медленной шине. Таким образом в кешлайне лежит, например, сразу восемь чиселок, которые надо добавить к аккумулятору.
Если лист лежит в памяти последовательно, то процесс, по идее, должен быть таким же. А если элементы как-то неоднородно в памяти лежат, за ними приходится ходить в память (опять-таки, шина в оперативную память очень медленная и читать оттуда очень дорого по сравнению с чтением из кэша)
Ну так согласно этому объяснению лист равен или медленнее чем вектор, но никак не быстрее
серёжа
Mikhail
А кто говорит, что лист быстрее?
@HissingSound , у него в дебаге быстрее лист. Так то и без кэшей можно объяснить почему лист медленнее чисто алгоритмически
Dmitriy / დიმიტრი
Мне бы понять почему у меня быстрее
в дебаге. Это же такая интрига
Dmitriy / დიმიტრი
Может дело в компиляторе? gcc 5.3.0
Mikhail
Ну понятно что дело в компиляторе. Не понятно как такое может быть в принципе
Mikhail
Я могу еще представить, что компилятор в дебаге не оптимизирует обращение к памяти вектора, и каждый раз обращение по индексу происходит заново. Т.е. итератор каждый раз высчитывается заново. Но тогда бы они были равны по скорости, а не быстрее
Michael
может проверки на валидность памяти или что-то вроде?
Mikhail
Mikhail
могут быть точнее
Denis
Вектор реаллоки делает при увеличении, а лист нет
Mikhail
если они включены, то будут везде
Dmitriy / დიმიტრი
Ща clang'ом соберу
Mikhail
Mikhail
Вообще стоит добавить еще один тест
Mikhail
Для вектора
Mikhail
когда числа брать напрямую из памяти, как будто это int[] а не вектор
Mikhail
В этом случае должно быть быстрее, а если нет, то это какая то магия
Mikhail
а если же быстрее, то разница в исполнении итераторов
Mikhail
итератор вектора почему то медленнее итератора листа в дебаге
Dmitriy / დიმიტრი
Dmitriy / დიმიტრი
странная какая-то херня получается
серёжа
о_О
Michael
и все-таки возмножно он постоянно проверяет выход за границу, листу то такие проверки не нужны
Dmitriy / დიმიტრი
типа vector<int> на vector<int *>? Или ты про другое?
Mikhail
Michael
что за метод?
Mikhail
и посчитай используя pArray
Mikhail
фором например
Mikhail
Dmitriy / დიმიტრი
Ща попробую
Stanislav
вангую погрешность измерений :D
Deleted Account
Michael
а на классическом for такое же поведение?
Mikhail
Mikhail
Нужно без итераторов
Mikhail
чтобы проверить гипотезу, что в них проблема
Mikhail
Mikhail
т.е. то лист был бы быстрее, то вектор
Mikhail
а тут стабильно и разница большая
Mikhail
Кстати, если выяснится, что проблема в итераторах, можно будет чотко подъебывать собеседующих с этим вопросом :)
Dmitriy / დიმიტრი
Dmitriy / დიმიტრი
стало быстрее
Mikhail
Значительно быстрее
Mikhail
Теперь в релизе давай посмотрим
Dmitriy / დიმიტრი
У меня походу комп сыт уже этим примером. На релизе выдает 0 ms. Ща попробую поменьше велечину указать для замера времени
Deleted Account
чотыбесишся!
Dmitriy / დიმიტრი
Dmitriy / დიმიტრი
list cycle это ппц 😂
Mikhail
Ну вот, похоже с итераторам вектора в дебаге какой то косяк
Deleted Account
Mikhail
Но лучше несколько раз позапускай свой тест в дебаге и релизе, потому что у тебя процесс может прерываться на неопределенное время в случайные промежутки времени
Mikhail
Ага
Mikhail
да это бы также и на лист влияло бы
Denis
for(auto i=v.begin();i<v.end();++i)
Igor
it = std::begin(vec);
Igor
Это только старт
Denis
i = v.begin() + 42
Igor
А потом двигай
Surreal
Немного оффтопа. Просто хочу выразить свою благодарность разработчикам selinux и драйверов nvidia за потраченные 2 часа времени в попытках найти в чем причина поломки драйверов после апдейта из репов.
Surreal
Denis
Igor
Главное проверяй на std::end(vec);
Surreal
Затем.
Igor
Вот пример тогда: https://ideone.com/zfLALN
Igor
Это имелось ввиду?
Igor
Просто перемещаемся на 4
Sergey
посоны. а вот примут к рассморению такой пропосал?
Sergey
убрать запись чисел в восьмеричной системе