realloc()函数是否真的没有支持对齐的版本?

20

现有许多经过改进的 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的内存对齐?


3
@PeterJ:你是说对齐分配函数保存的信息比malloc()保存的信息更少吗?我非常怀疑... 不管怎样,如果你能进一步详细说明,并最好附带一些讨论链接,请发布一个答案。 - einpoklum
5
@PeterJ: 但是要翻译哪个列表呢?... - einpoklum
2
@AndrewHenle:当你在分配器内部而不是外部时,这很琐碎。 - einpoklum
1
@TonyTannous:感谢你的慷慨奖励,朋友 :-) - einpoklum
1
@TonyTannous:我刚刚问了这个问题 - einpoklum
显示剩余6条评论
1个回答

7

只有在Microsoft中使用_aligned_realloc函数才实现了对齐realloc。在Linux中没有定义POSIX版本,也没有实现。我从来没有理解为什么会这样,因为在glibc中编码似乎并不复杂。

我认为随着宽SIMD指令的出现,很快就会有人实现它。

目前,只需分配一个新的对齐内存块,复制内容并释放旧指针即可。这不应该影响您的应用程序速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接