真的没有支持对齐的 realloc() 版本吗?
Posted
技术标签:
【中文标题】真的没有支持对齐的 realloc() 版本吗?【英文标题】:Is there really no version of realloc() supporting alignment? 【发布时间】:2018-01-12 04:41:40 【问题描述】:古老的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?
【问题讨论】:
@PeterJ:你是说对齐分配函数比malloc()
保存的信息少?我非常怀疑...无论如何,如果您可以进一步充实这一点,最好提供一些讨论的链接,请发布答案。
@PeterJ: 哪个列表呢?...
@AndrewHenle:当你在分配器的内部而不是在外部时,这很简单。
@TonyTannous:感谢您的赏金,朋友 :-)
@TonyTannous:我刚刚问过this
【参考方案1】:
对齐的 realloc 仅在 Microsoft 中通过 _aligned_realloc
函数实现。
Linux 中没有定义 POSIX 版本,也没有实现。但我一直不明白为什么,因为在glibc 中编写代码似乎并不复杂。
考虑到广泛的 SIMD 指令的出现,我认为有人实施它只是时间问题。
目前,只需分配一个新的对齐内存块,复制内容并释放旧指针。无论如何,这不应该减慢您的应用程序。
【讨论】:
以上是关于真的没有支持对齐的 realloc() 版本吗?的主要内容,如果未能解决你的问题,请参考以下文章
realloc() 失败并返回 NULL 时的正确用法是啥?