Size: a a a

2020 August 03

I

Ioann_V in pro.cxx
Aidar Fattakhov
Я уверен что алокации в конструкторе по умолчанию замедлят код сильно больше ифа в пушбеке
Не совсем, конечно. Во первых, в конструкторе у тебя выделяется скажем 4 элемента, внутри аллокатора, это часто будет задействован внутренний пул, что вообще ни о чем + ты используешь эту память после, в ином случае, в конструкторе ты ну лишь указатели, что тоже свое немного, но забирает
источник

AF

Aidar Fattakhov in pro.cxx
Ioann_V
Не совсем, конечно. Во первых, в конструкторе у тебя выделяется скажем 4 элемента, внутри аллокатора, это часто будет задействован внутренний пул, что вообще ни о чем + ты используешь эту память после, в ином случае, в конструкторе ты ну лишь указатели, что тоже свое немного, но забирает
Это всеравно больше одного ифа
источник

I

Ioann_V in pro.cxx
Я просто где то читал, что таки это не правда, что нельзя делать аллокации в ctor
источник

I

Ioann_V in pro.cxx
и вообще говоря, это можнр
источник

I

Ioann_V in pro.cxx
просто в случае вектора, я не понимаю
источник

I

Ioann_V in pro.cxx
почему специфика тор noexcept берётся у def конструктора аллокатора
источник

I

Ioann_V in pro.cxx
а не у функции alloc
источник

I

Ioann_V in pro.cxx
так то, можно написать свой аллокатор, и его деф стор сделать сроубл.
источник

AF

Aidar Fattakhov in pro.cxx
Ioann_V
Не совсем, конечно. Во первых, в конструкторе у тебя выделяется скажем 4 элемента, внутри аллокатора, это часто будет задействован внутренний пул, что вообще ни о чем + ты используешь эту память после, в ином случае, в конструкторе ты ну лишь указатели, что тоже свое немного, но забирает
никто не использует optional<vector>
источник

AF

Aidar Fattakhov in pro.cxx
Ты изобретаешь какой-то аналог коровьей строки сейчас
источник

I

Ioann_V in pro.cxx
Aidar Fattakhov
Это всеравно больше одного ифа
да, но он вызовется один раз, а вот p_b вызывается чаще.
источник

AF

Aidar Fattakhov in pro.cxx
Ioann_V
да, но он вызовется один раз, а вот p_b вызывается чаще.
Там же иф только на рост
источник

AF

Aidar Fattakhov in pro.cxx
Он один раз на вектор обычно в среднем
источник

I

Ioann_V in pro.cxx
Aidar Fattakhov
Там же иф только на рост
Да, да. Тут я подзаговорлся, все так. Всё равно, не понимаю, почему так. Если что, можешь переобъяснить.
источник

AF

Aidar Fattakhov in pro.cxx
К тому же после этого ифа у тебя наверное аллокация сразу же, которая несравнимо дольше
источник

m

magras in pro.cxx
Pepe 🐸
ты слышал про polymorphic memory resource? (оффтоп слегка)
pmr - это о том, чтобы не запекать тип аллокатора в вектор. Это все ортогонально работе самого аллокатора.
источник

DS

Dmitry Sokolov in pro.cxx
Ioann_V
Или, стандарт запрещает резервировать память в умолчательном конструкторе?
А какой смысл там резрвировать память? Получается если после конструирования делаешь reserve это деградация, т.к. реаллокация.
Можно было бы конечно сделать какой-то отдельный конструктор для этого, типа vector v (std::reserve_capacity(42)), но стоит ли?
источник

DS

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

АК

Александр Караев... in pro.cxx
Ioann_V
Или, стандарт запрещает резервировать память в умолчательном конструкторе?
а в чем проблема сделать allocate внутри конструктора и пометить конструктор аллокатора как noexcept(noexcept(allocate()))?
источник

I

Ioann_V in pro.cxx
Dmitry Sokolov
Какая деградация, push_back в любом случае делает проверку capacity, независимо от того был reserve или нет.
А я не про это. Я про проверку размера, который надо задать. end - begin x 2, или start_size or end - begin x 2
источник