Подтвердить что ты не робот

Realloc- в стандартном распределителе

Для стандартного интерфейса распределителя для использования, скажем, std::vector, поддерживается ли перераспределение? У меня довольно конкретный прецедент, когда возможность realloc напрямую будет намного эффективнее, чем распределение, перемещение и освобождение.

Изменить: Извините, у меня нет абсолютно никакого намерения вызывать фактический realloc, я имел в виду функцию с семантикой. Фактически, я выделяю стек в фоновом режиме, и если я выделяю больше из стека, то я не могу освободить его под ним, что является полным количеством отходов, потому что нет необходимости снова выделять, так как там много доступно смежное свободное пространство. Таким образом, если бы меня попросили перераспределить за один шаг, то я мог бы не иметь вначале, выделить некоторые вещи и отбросить некоторую память, а во-вторых, переместить все содержимое vector.

4b9b3361

Ответ 2

Я считаю, что realloc() не является частью интерфейса распределителя STL. Но realloc() всегда является crap-shoot, так как вы действительно не знаете, будет ли ваша ОС расширять ваше выделение или переместить вас на новый. Фактическая производительность очень зависит от ОС. Если вы знаете, что хотите перераспределить, вы можете просто выделить большую часть памяти заранее, что, к счастью, STL упростится.

Есть ли у вас вариант использования, где это было бы нежелательно?

Ответ 3

Вы можете поместить флаг bool в структуру, которую вы сохраняете в std::vector, чтобы указать ее логически удаленную или нет. Чтобы удалить элемент, установите этот флаг в true, но физически его не удалите. Чтобы перераспределить элемент, найдите флаг true, установите для него значение false, чтобы он не был удален и который его использовал.