Когда
std::vector увеличивает свою емкость, он поочередно копирует каждый элемент, а затем уничтожает исходные объекты.
Для типов, которые по сути представляют собой просто набор битов (
string,
unique_ptr, сам
vector), такое копирование с последующим уничтожением — лишняя работа.
В C++26 компилятор сможет вместо этого использовать
memcpy.
Предложение P2786 добавляет в C++26 тривиальную перемещаемость. Пометьте свой тип как
trivially_relocatable, и контейнеры смогут переносить элементы одним вызовом
memcpy вместо копирования с последующим уничтожением.
Измеренное ускорение при перераспределении памяти
vector для распространенных типов: от 2 до 10 раз.
@Cpportal
Обсуждение 0
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram