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