Closed apolukhin closed 3 years ago
yndx-antoshkka, 10 сентября 2018, 11:58 Дубль. Есть аналогичное предложение: #354
Илья, 15 сентября 2018, 21:14 yndx-antoshkka, ваша ссылка ведет на это же предложение. Ссылка через поиск: https://github.com/cpp-ru/ideas/issues?q=is%3Aissue+is%3Aopen+realloc
Илья, 15 сентября 2018, 22:03 yndx-antoshkka, предложение от 5 декабря 2016 зависло, или есть какой-то прогресс?
Сергей Мищенко, необходимо предусмотреть как расширение, так и сужение области выделенной памяти. В том числе вариант должен работать в обе стороны относительно выделенного участка памяти. Итого 4 комбинации.
Если сужение будет работать всегда, то расширение только при наличии свободной памяти до/после выделенного блока памяти.
Если памяти для расширения недостаточно, как функция должна себя вести? Например память довыделить можно, но не столько, сколько запрошено, а меньше. В таком случае решением, вероятно, будет реализовать возможность указывать диапазон, сколько хотим довыделить, и сколько устроит, если сколько хотим довыделить невозможно...
Касательно функции проверки возможности изменения размера блока памяти, возникает следующая проблема - после ее вызова придется гарантировать эту самую возможность. Т.о. функция должна и определять объем довыделяемой памяти и довыделять ее за один вызов.
Аналогичное предложение #28
Перенос предложения: голоса +4, -2 Автор идеи: Сергей Мищенко
Суть - в С прекрасно работал realloc который позволял снизить количество копирований при ресайзе буфера. В С++ оно работь будет не с любым типом объектов по причине невозможности копирования некоторых типов объектов через memcpy. Так же автоматическое копирование буфера, в случае необходимости выделения блока в другом месте, не является оптимальной стратегией расширения буфера для вставки в середину. В результате возможность использования realloc сведена практически к нулю. Для нормального использования функционала изменения размера блока, необходимо сделать аналог realloc, позволяющий в случае невозможности расширения буфера, производить копирование и очистку старого буфера вручную, что позволит снизить количество копирований и фрагментацию кучи при ресайзе буферов.