真的没有realloc()版本支持对齐吗?

时间:2017-08-04 09:44:38

标签: c memory-management alignment malloc 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()变体中搜索对齐的内存块相结合似乎非常简单。

相关:

Does realloc keep the memory alignment of posix_memalign?

1 个答案:

答案 0 :(得分:5)

对齐的realloc仅在Microsoft中使用_aligned_realloc函数实现。 没有定义POSIX版本,也没有在Linux中实现。我从来不明白为什么,因为在glibc中编码似乎并不那么复杂。 考虑到广泛的SIMD指令的出现,我认为有人实施它是一个时间问题。

目前,只需分配一个新的对齐内存块,复制内容并释放旧指针。无论如何,这不应该减慢您的应用程序。