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

ein*_*ica 19 c malloc memory-management alignment 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);
Run Code Online (Sandbox Code Playgroud)

(分别来自POSIX,glibc和Linux libc).但是 - 我似乎无法找到任何realloc()支持对齐的版本.它真的没有实现过吗?将非对齐的功能realloc()与在对齐的malloc()变体中搜索对齐的内存块相结合似乎是微不足道的.

有关:

realloc是否保持posix_memalign的内存对齐?

yak*_*dbz 5

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

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

  • 如果您遗漏了最后一句话,您会+1吗?我也不是那么无能为力...另外,如果可能,我们需要官方消息。 (3认同)
  • 您可以拥有自己的内存池并可以实现自己对齐的重新分配,或者使用memalign + memcpy + free,或者因为“不是那么笨拙”而可以等待更有用的答案。 (2认同)