Size: a a a

2020 August 03

CD

Constantine Drozdov in pro.cxx
Плюс вектору запрещен small optimization, так что мелкие вектора тормозят
источник

I

Ioann_V in pro.cxx
Constantine Drozdov
Ой какой не факт, особенно если не было reserve
А reserve тут ни при чем, код push_back то, останется тем же.
источник

CD

Constantine Drozdov in pro.cxx
Ioann_V
А reserve тут ни при чем, код push_back то, останется тем же.
Ну если пуш бек точно будет и надо перфоманс, будет же reserve
источник

CD

Constantine Drozdov in pro.cxx
Весь вопрос чинится reserve(4)
источник

I

Ioann_V in pro.cxx
ну в общем, тут даже не это интересно, а то, на сколько верно утверждение, что в def конструкторе вектора, по факту, нельзя дёрнуть std alloc->allocate.
источник

CD

Constantine Drozdov in pro.cxx
Попробуй начать с того, почему move ctor не мог это сделать, может там рядом ответ
источник

I

Ioann_V in pro.cxx
Constantine Drozdov
Попробуй начать с того, почему move ctor не мог это сделать, может там рядом ответ
Конечно, я и своими силами ответ ищу, но, может в сообществе кто знает уже ответ. Хотя с мувом, все весьма очевидно. Ему разве надо что-то выделять?
источник

CD

Constantine Drozdov in pro.cxx
Боюсь, этими знаниями могут обладать 20 человек из WG21
источник

CD

Constantine Drozdov in pro.cxx
Ioann_V
Конечно, я и своими силами ответ ищу, но, может в сообществе кто знает уже ответ. Хотя с мувом, все весьма очевидно. Ему разве надо что-то выделять?
Так это такой же "default ctor + swap"
источник

P

Pepe 🐸 in pro.cxx
Ioann_V
А reserve тут ни при чем, код push_back то, останется тем же.
ты слышал про polymorphic memory resource? (оффтоп слегка)
источник

I

Ioann_V in pro.cxx
Pepe 🐸
ты слышал про polymorphic memory resource? (оффтоп слегка)
Полиморфик Аллокатор? Про него, да.
источник

P

Pepe 🐸 in pro.cxx
Ioann_V
Полиморфик Аллокатор? Про него, да.
про который что можно на стеке память зарезервировать и потом сделать аллокатор который будет со стэка аллоцировать
источник

I

Ioann_V in pro.cxx
Pepe 🐸
про который что можно на стеке память зарезервировать и потом сделать аллокатор который будет со стэка аллоцировать
Да, слышал про такое. Но никогда не стоит забывать, что стековая память, это, условно говоря, таже хипа. Адресное пространство то одно.
источник

P

Pepe 🐸 in pro.cxx
https://youtu.be/q6A7cKFXjY0

я здесь видел
источник

P

Pepe 🐸 in pro.cxx
Ioann_V
Да, слышал про такое. Но никогда не стоит забывать, что стековая память, это, условно говоря, таже хипа. Адресное пространство то одно.
ну разница в аллокации (поиск по фрилисту, против инкремента пойнтера)?
источник

I

Ioann_V in pro.cxx
Смотря как напишешь. Но в верном случае, разницы быть не должно вовсе, за тем исключением, что странички стека всегда горяченькие в ОСке и кешах tlb. Так у меня и на хипе вектор быстрее stl ного работает.
источник

I

Ioann_V in pro.cxx
Pepe 🐸
ну разница в аллокации (поиск по фрилисту, против инкремента пойнтера)?
Если ты думаешь, что создав массив и сразу к нему обратившись, решает, то отмечу, что и с хипой такой трюк провернуть можно. Заранее что то там навыделять и прогреть pf ом.
источник

P

Pepe 🐸 in pro.cxx
Ioann_V
Если ты думаешь, что создав массив и сразу к нему обратившись, решает, то отмечу, что и с хипой такой трюк провернуть можно. Заранее что то там навыделять и прогреть pf ом.
ну да в принципе, просто тут уже готовый аллокатор, писать свой это все таки гимор. Но в принципе приложения тоже разные. Я так просто любопытства ради упомянул
источник

AF

Aidar Fattakhov in pro.cxx
Ioann_V
Я так понимаю, по итогу, не имея возможности заранее задавать буффер, мы получаем деградацию перфоманса, пусть и маленькую: когда начальный размер нуль, в push_back мы должны будем сделать проверку и выставить нужный размер - если нуль, то скажем, 4 элемента, а если не нуль, то умножим на два, как и делает gcc...Но это лишняя инструкция, в лучшем случае - cmove, если мы про x86, в худшем - ветка, наверное. Или такой гарантии нету и все же мы можем дёрнуть аллокатор в конструкторе вектора, при этом как то порешав проблемы с noexcept spec?(которая по утверждению cppref берется с Умолчательного ctor allocator, а не у функции allocate!!!)
Я уверен что алокации в конструкторе по умолчанию замедлят код сильно больше ифа в пушбеке
источник

AF

Aidar Fattakhov in pro.cxx
У стд контейнеров есть какие-то гарантии, может быть они не универсальные но они широкоприменимые и это какой-то компромис, и если они не подходят значит нужно писать своё
источник