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

Нет ли версии realloc(), поддерживающей выравнивание?

Существует несколько выровненных версий почтенного malloc(), например:

#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
void *aligned_alloc(size_t alignment, size_t size);

#include <malloc.h>
void *memalign(size_t alignment, size_t size);

(происходит из POSIX, glibc и Linux libc соответственно). Но... я не могу найти упоминания о версии realloc(), которая поддерживает выравнивание. Неужели это никогда не было реализовано? Кажется довольно тривиальным объединить функциональность не выровненного realloc() с поиском выровненного фрагмента памяти в выровненных вариантах malloc().

по теме:

Поддерживает ли realloc выравнивание памяти posix_memalign?

4b9b3361

Ответ 1

Aligned realloc реализуется только в Microsoft с помощью функции _aligned_realloc. В Linux нет версии POSIX и не реализована. Я никогда не понимал, почему, хотя, потому что это не кажется настолько сложным для кода в glibc. Я думаю, что это вопрос времени, прежде чем кто-то осуществит его с учетом появления широких инструкций SIMD.

На данный момент просто выделите новый блок выровненной памяти, скопируйте содержимое и освободите старый указатель. Это не должно замедлять ваше приложение.