Нет ли версии 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?
Ответы
Ответ 1
Aligned realloc реализуется только в Microsoft с помощью функции _aligned_realloc
.
В Linux нет версии POSIX и не реализована. Я никогда не понимал, почему, хотя, потому что это не кажется настолько сложным для кода в glibc.
Я думаю, что это вопрос времени, прежде чем кто-то осуществит его с учетом появления широких инструкций SIMD.
На данный момент просто выделите новый блок выровненной памяти, скопируйте содержимое и освободите старый указатель. Это не должно замедлять ваше приложение.