Size: a a a

2020 August 03

DF

Dollar Føølish in pro.cxx
У аллокатора
источник

_

_aam in pro.cxx
namespace pmr { template <class T> using vector = std::vector<T, polymorphic_allocator<T>>; }
источник

DC

Denis Chernikov in pro.cxx
Ioann_V
Ну, то есть, выходит, если я хочу сделать свой вектор stl, я не имею право выделять в конструкторе умолчательном память!?
Видимо нет
источник

I

Ioann_V in pro.cxx
Dollar Føølish
У аллокатора
Так, std alloc исключений не бросает, тут только обертку писать.
источник

АК

Александр Караев... in pro.cxx
Ioann_V
Ну, то есть, выходит, если я хочу сделать свой вектор stl, я не имею право выделять в конструкторе умолчательном память!?
имеешь.
в конструкторе вектора у тебя noexcept(noexcept(Allocator())
в конструкторе аллокатора у тебя noexcept(whatever_you_want)
источник

I

Ioann_V in pro.cxx
Ioann_V
Так, std alloc исключений не бросает, тут только обертку писать.
Пустую и бесполезную.
источник

DF

Dollar Føølish in pro.cxx
Александр Караев
имеешь.
в конструкторе вектора у тебя noexcept(noexcept(Allocator())
в конструкторе аллокатора у тебя noexcept(whatever_you_want)
Вот я про ето
источник

DS

Dmitry Sokolov in pro.cxx
Ioann_V
Ну, то есть, выходит, если я хочу сделать свой вектор stl, я не имею право выделять в конструкторе умолчательном память!?
А смысл? Как правильно @webreh заметил, если уж дошло до реаллокации, if в расчёте new capacity это вообще ни о чём.
источник

DC

Denis Chernikov in pro.cxx
Александр Караев
имеешь.
в конструкторе вектора у тебя noexcept(noexcept(Allocator())
в конструкторе аллокатора у тебя noexcept(whatever_you_want)
К слову, а что делать с этим выделенным куском памяти в конструкторе аллокатора? И ведь capacity будет возвращать не то...
источник

I

Ioann_V in pro.cxx
Dollar Føølish
Вот я про ето
Ну, да, я этот вариант описывал. Не очень красиво. Но я если что, как раз с вопросом пришёл, а не вешать свои ответы. Окей. Раз я ещё жив, значит, я в целом, двигаюсь верно.
источник

I

Ioann_V in pro.cxx
Dmitry Sokolov
А смысл? Как правильно @webreh заметил, если уж дошло до реаллокации, if в расчёте new capacity это вообще ни о чём.
Ну у меня тут есть интересный тестик. Он просто есть, и он не совсем по стандарту сделан.
источник

АК

Александр Караев... in pro.cxx
Denis Chernikov
К слову, а что делать с этим выделенным куском памяти в конструкторе аллокатора? И ведь capacity будет возвращать не то...
только если в аллокатор как-то зашить, не знаю
источник

I

Ioann_V in pro.cxx
Переслано от Ioann_V
test_vector_impl_2/0                7.58 ns         7.58 ns     91971092
test_vector_impl_2/0                7.58 ns         7.57 ns     92448670
test_vector_impl_2/1                7.86 ns         7.86 ns     88593575
test_vector_impl_2/8                10.8 ns         10.8 ns     64356786
test_vector_impl_2/64               40.8 ns         40.8 ns     17350757
test_vector_impl_2/512               264 ns          264 ns      2657251
test_vector_impl_2/4096             1950 ns         1950 ns       357502
test_vector_impl_2/32768           14048 ns        14046 ns        49850
test_vector_impl_2/262144         127095 ns       127077 ns         5509
test_vector_impl_2/2097152       1636795 ns      1636258 ns          428
test_vector_impl_2/16777216     46718015 ns     46572042 ns           15
test_vector_impl_2/134217728   330525699 ns    329564641 ns            2
test_vector_impl_2/1073741824 3449255384 ns   3440804829 ns            1
test_vector_stl/0                  0.711 ns        0.711 ns    985424099
test_vector_stl/0                  0.711 ns        0.711 ns    984419480
test_vector_stl/1                   12.0 ns         12.0 ns     57252129
test_vector_stl/8                   75.5 ns         75.5 ns      9179818
test_vector_stl/64                   194 ns          194 ns      4073882
test_vector_stl/512                 1193 ns         1193 ns       589620
test_vector_stl/4096                8635 ns         8634 ns        81001
test_vector_stl/32768              69071 ns        69062 ns        10131
test_vector_stl/262144            543665 ns       543593 ns         1329
test_vector_stl/2097152          7955578 ns      7946139 ns           89
test_vector_stl/16777216        66200328 ns     66130606 ns           11
test_vector_stl/134217728      572523496 ns    571873557 ns            1
test_vector_stl/1073741824    4592134399 ns   4580588818 ns            1

Вот, с форматированием лучше. Радует показатель в 5 раз на тесте с /512
источник

NP

Nikita Provotorov in pro.cxx
Ioann_V
Ну, то есть, выходит, если я хочу сделать свой вектор stl, я не имею право выделять в конструкторе умолчательном память!?
Оно и хорошо. Что, если пользователю и не нужно выделять память? Например, элементы в вектор кладутся в if’е.
А если пользователь хочет заранее выделить память, то просто reserve позовет, из оверхеда разве что дополнительный call, и тот, скорее всего, заинлайнится.
источник

I

Ioann_V in pro.cxx
Сорян, если текста много.
источник

I

Ioann_V in pro.cxx
Nikita Provotorov
Оно и хорошо. Что, если пользователю и не нужно выделять память? Например, элементы в вектор кладутся в if’е.
А если пользователь хочет заранее выделить память, то просто reserve позовет, из оверхеда разве что дополнительный call, и тот, скорее всего, заинлайнится.
Ситуации разные, мне вот в моей задаче, такая преаллокация, идёт плюсом. Дело не в reserve, конечно.
источник

DS

Dmitry Sokolov in pro.cxx
Ioann_V
Ну у меня тут есть интересный тестик. Он просто есть, и он не совсем по стандарту сделан.
Ну понятно что если уж гоняться за скоростью, так при известном размере можно вообще какой-нить raw_push_back сделать без проверки capacity и получить супер-прирост, только это ж всё unsafe и уже не std::vector.
источник

NP

Nikita Provotorov in pro.cxx
Ioann_V
Ситуации разные, мне вот в моей задаче, такая преаллокация, идёт плюсом. Дело не в reserve, конечно.
В таком случае очень легко написать RAII обертку над std vector. А если бы аллокации в stl контейнере были в конструкторе, то избавиться от них было бы ой как непросто
источник

I

Ioann_V in pro.cxx
Dmitry Sokolov
Ну понятно что если уж гоняться за скоростью, так при известном размере можно вообще какой-нить raw_push_back сделать без проверки capacity и получить супер-прирост, только это ж всё unsafe и уже не std::vector.
Угу, +- то и выходит. Но, если что, проверка капасити там есть. И это тест, p_b операции.
источник

MV

Mikhail Voronov in pro.cxx
Ioann_V
Переслано от Ioann_V
test_vector_impl_2/0                7.58 ns         7.58 ns     91971092
test_vector_impl_2/0                7.58 ns         7.57 ns     92448670
test_vector_impl_2/1                7.86 ns         7.86 ns     88593575
test_vector_impl_2/8                10.8 ns         10.8 ns     64356786
test_vector_impl_2/64               40.8 ns         40.8 ns     17350757
test_vector_impl_2/512               264 ns          264 ns      2657251
test_vector_impl_2/4096             1950 ns         1950 ns       357502
test_vector_impl_2/32768           14048 ns        14046 ns        49850
test_vector_impl_2/262144         127095 ns       127077 ns         5509
test_vector_impl_2/2097152       1636795 ns      1636258 ns          428
test_vector_impl_2/16777216     46718015 ns     46572042 ns           15
test_vector_impl_2/134217728   330525699 ns    329564641 ns            2
test_vector_impl_2/1073741824 3449255384 ns   3440804829 ns            1
test_vector_stl/0                  0.711 ns        0.711 ns    985424099
test_vector_stl/0                  0.711 ns        0.711 ns    984419480
test_vector_stl/1                   12.0 ns         12.0 ns     57252129
test_vector_stl/8                   75.5 ns         75.5 ns      9179818
test_vector_stl/64                   194 ns          194 ns      4073882
test_vector_stl/512                 1193 ns         1193 ns       589620
test_vector_stl/4096                8635 ns         8634 ns        81001
test_vector_stl/32768              69071 ns        69062 ns        10131
test_vector_stl/262144            543665 ns       543593 ns         1329
test_vector_stl/2097152          7955578 ns      7946139 ns           89
test_vector_stl/16777216        66200328 ns     66130606 ns           11
test_vector_stl/134217728      572523496 ns    571873557 ns            1
test_vector_stl/1073741824    4592134399 ns   4580588818 ns            1

Вот, с форматированием лучше. Радует показатель в 5 раз на тесте с /512
а константы расширения одинаковые?
источник