Хотя POSIX (который обычно выступает в качестве наименьшего общего знаменателя на большинстве платформ) не имеет aligned_realloc
, он имеет aligned_alloc
и memcpy
. Следовательно, вы можете очень легко реализовать свой собственный aligned_realloc
, который гарантированно будет работать на любой разумно совместимой платформе, использующей их. Однако обратите внимание, что не существует стандартного метода posix для получения размера malloc
'области памяти. Вам придется отслеживать это самостоятельно.
РЕДАКТИРОВАТЬ: есть немного свободного времени, поэтому я расширяю его, чтобы ответить на самую распространенную критику
То, что я предложил, это, как заметит проницательный комментатор, а не то, как realloc
работает внутри.
Под капотом ваша стандартная реализация realloc
сделает все возможное, чтобы не допустить преобразующего вышеописанного поведения неправильного использования памяти и последующего освобождения памяти. Он попытается использовать один из двух вариантов поведения, прежде чем прибегнуть к отступлению.
1) Если новый размер меньше старого, он изменит размер памяти на месте, избегая необходимости выделять, копировать или освобождать.
2) если новый размер больше старого, он (в упрощенном виде) увидит, есть ли рядом свободная память достаточного размера, и если это так, то сожрет эту память и изменит ее размер. Если нет, то он прибегает к запасному варианту.
Я предложил наивный подход, поскольку полагал, что большинство людей, задающих этот вопрос, не захотят реализовывать собственную реализацию malloc. (Хотя я настоятельно рекомендую делать это в образовательных целях)
Надеюсь, это удовлетворит любые жалобы!