古老的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()
变体中搜索对齐的内存块相结合似乎非常简单。
相关:
答案 0 :(得分:5)
对齐的realloc仅在Microsoft中使用_aligned_realloc
函数实现。
没有定义POSIX版本,也没有在Linux中实现。我从来不明白为什么,因为在glibc中编码似乎并不那么复杂。
考虑到广泛的SIMD指令的出现,我认为有人实施它是一个时间问题。
目前,只需分配一个新的对齐内存块,复制内容并释放旧指针。无论如何,这不应该减慢您的应用程序。