Добавить не копирующий вариант функции realloc и/или функцию проверки возможности изменения размера блока памяти

Сергей Мищенко
Сергей Мищенко

Суть - в С прекрасно работал realloc который позволял снизить количество копирований при ресайзе буфера. В С++  оно работь будет не с любым типом объектов по причине невозможности копирования некоторых типов объектов через memcpy.  Так же автоматическое копирование буфера, в случае  необходимости выделения блока в другом месте, не является оптимальной стратегией  расширения буфера для вставки в середину.  В результате возможность использования realloc сведена практически к нулю.  Для нормального использования функционала изменения размера блока, необходимо сделать аналог realloc,  позволяющий в случае невозможности расширения буфера, производить копирование и очистку старого буфера вручную, что позволит снизить количество копирований и фрагментацию кучи при ресайзе буферов.

1
рейтинг
есть аналогичное предложение
3 комментария
yndx-antoshkka

Дуюль. Есть аналогичное предложение: https://stdcpp.ru/proposals/96ba220e-704a-44be-aefd-712ff027fd9e

yndx-antoshkka
Илья

yndx-antoshkka, ваша ссылка ведет на это же предложение. Ссылка через поиск: https://stdcpp.ru/search?type=proposal&text=realloc

Илья
Илья

yndx-antoshkka, предложение от 5 декабря 2016 зависло, или есть какой-то прогресс? 

Сергей Мищенко, необходимо предусмотреть как расширение, так и сужение области выделенной памяти. В том числе вариант должен работать в обе стороны относительно выделенного участка памяти. Итого 4 комбинации.

Если сужение будет работать всегда, то расширение только при наличии свободной памяти до/после выделенного блока памяти.

Если памяти для расширения недостаточно, как функция должна себя вести? Например память довыделить можно, но не столько, сколько запрошено, а меньше. В таком случае решением, вероятно, будет реализовать возможность указывать диапазон, сколько хотим довыделить, и сколько устроит, если сколько хотим довыделить невозможно...

Касательно функции проверки возможности изменения размера блока памяти, возникает следующая проблема - после ее вызова придется гарантировать эту самую возможность. Т.о. функция должна и определять объем довыделяемой памяти и довыделять ее за один вызов.

Илья
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения