Size: a a a

2020 November 17

P

Pepe 🐸 in pro.cxx
а кто нибудь может сходу сказать:

что быстрее вектор с элементами, и на каждый элемент по треду (доступ по индексу), но наверно кэш будет перезагружаться, или хэшмапа с доступом по ключу из строки, длиной может 20-50 символов?
источник

D

Danya in pro.cxx
Pepe 🐸
а кто нибудь может сходу сказать:

что быстрее вектор с элементами, и на каждый элемент по треду (доступ по индексу), но наверно кэш будет перезагружаться, или хэшмапа с доступом по ключу из строки, длиной может 20-50 символов?
Вектор + tbb::cache_aligned_allocator
источник

D

Danya in pro.cxx
Но вообще мерить надо конечно
источник

AS

Alex Sandrov in pro.cxx
Посоветуйте?
Нужен контейнер, чтобы как queue, можно было закидывать элементы в хвост и выкидывать (лишние, переполнение) с головы. И с возможностью быстро проитерировать по всем элементам?
источник

AS

Anatoly Shirokov in pro.cxx
Alex Sandrov
Посоветуйте?
Нужен контейнер, чтобы как queue, можно было закидывать элементы в хвост и выкидывать (лишние, переполнение) с головы. И с возможностью быстро проитерировать по всем элементам?
deque
источник

AS

Alex Sandrov in pro.cxx
vector, я так думаю, не подойдёт нормально по причине того, что erase(begin()) может дорого стоить?
источник

AS

Alex Sandrov in pro.cxx
о, спасиб
источник

m

magras in pro.cxx
Alex Sandrov
Посоветуйте?
Нужен контейнер, чтобы как queue, можно было закидывать элементы в хвост и выкидывать (лишние, переполнение) с головы. И с возможностью быстро проитерировать по всем элементам?
Вытеснение при переполнении намекает на кольцевой буфер. В стандартной библиотеке такого нет.
источник

AM

Alexander Malkov in pro.cxx
magras
Вытеснение при переполнении намекает на кольцевой буфер. В стандартной библиотеке такого нет.
в boost есть такая вещь, как Boost.Circular Buffer
https://www.boost.org/doc/libs/1_74_0/doc/html/circular_buffer.html
источник

AS

Alex Sandrov in pro.cxx
Спасибо!
я пока руками вытесняю, мне просто надо как-то псевдо-разумно ограничить размер буфера
deque - норм
источник

m

magras in pro.cxx
Alex Sandrov
Спасибо!
я пока руками вытесняю, мне просто надо как-то псевдо-разумно ограничить размер буфера
deque - норм
Эмуляция кольцевого буфера на деке потребует аллокаций в то время как нормальные реализации используют буфер фиксированного размера.
источник

AS

Alex Sandrov in pro.cxx
Хмм, да, deque не умеет резервировать
источник

AM

Alexander Malkov in pro.cxx
Alisher Magametiliev
Там же знания дискретки ток нужны
Знания: Дискретной математики, Алгоритмов и структур данных, Паттернов проектирования и это только начало..))
источник

AS

Alex Sandrov in pro.cxx
ладно, пока пусть deque будет, если вдруг возникнут проблемы с производительностью, тогда я задумаюсь. Deque пока больше подходит, так как архитектурно размер очереди может меняться на ходу.... можно было бы вручную это всё сделать, аккуратно и красиво, да, но лень 😐
источник

m

magras in pro.cxx
Alex Sandrov
Хмм, да, deque не умеет резервировать
Там все еще хуже. Дек аллоцирует память блоками. В процессе работы кольцевого буфера постоянно будут выделятся новые блоки и освобождаться старые.
источник

NP

Nikita Provotorov in pro.cxx
Alisher Magametiliev
Там же знания дискретки ток нужны
кто ж вам такую дурость сказал. в среднестатистическом случае дискретка наоборот не нужна
источник

AS

Alex Sandrov in pro.cxx
magras
Там все еще хуже. Дек аллоцирует память блоками. В процессе работы кольцевого буфера постоянно будут выделятся новые блоки и освобождаться старые.
Ну если я туда буду закидывать unique_ptr, может всё не сильно плохо?
источник

m

magras in pro.cxx
Alex Sandrov
Ну если я туда буду закидывать unique_ptr, может всё не сильно плохо?
Ну если для вас это не страшно, то не мне вас останавливать.
источник

АК

Александр Караев... in pro.cxx
Alex Sandrov
Ну если я туда буду закидывать unique_ptr, может всё не сильно плохо?
unique_ptr - это просто добивание несчастной памяти
источник

АР

Андрей Руссков... in pro.cxx
magras
Там все еще хуже. Дек аллоцирует память блоками. В процессе работы кольцевого буфера постоянно будут выделятся новые блоки и освобождаться старые.
и? Ну аллоцирует блоками, это же не по блоку на элемент
источник