C11aligned_alloc分配的内存重新分配是不是保持对齐?
Posted
技术标签:
【中文标题】C11aligned_alloc分配的内存重新分配是不是保持对齐?【英文标题】:Does realloc of memory allocated by C11 aligned_alloc keep the alignment?C11aligned_alloc分配的内存重新分配是否保持对齐? 【发布时间】:2013-12-17 08:27:58 【问题描述】:考虑以下 (C11) 代码:
void *ptr = aligned_alloc(4096, 4096);
... // do something with 'ptr'
ptr = realloc(ptr, 6000);
由于ptr
指向的内存具有来自aligned_alloc
的4096 字节对齐,在(成功)调用realloc
之后它会(阅读:是否保证)保持该对齐?或者内存可以恢复到默认对齐方式吗?
【问题讨论】:
标准承诺没有这样的事情。 标准中没有规定realloc()
应记住原始指针的对齐要求,因此标准不要求保留对齐要求。
posix_memalign
相同:***.com/questions/9078259/…
【参考方案1】:
对齐不与指针保持一致。当您调用 realloc 时,您只能依赖 realloc 保证的对齐方式。您需要使用aligned_alloc 来执行任何重新分配。
【讨论】:
形式上,realloc
与malloc
+memcpy
+free
没有区别。
@R.. realloc 允许将其优化为增长或收缩,从而避免 memcpy
是的,但这是一种不违反形式等价的优化。为了推理与对齐相关的所需行为,最好将所有事情都按照 C 标准定义的抽象机器中的情况进行思考,而不是根据您期望发生的优化来进行思考。
@R..:这是不同的。您所描述的是最坏情况下会发生什么;你绝对不能假设最坏的情况总是会发生。即使在抽象机器中,这也不会总是发生。以上是关于C11aligned_alloc分配的内存重新分配是不是保持对齐?的主要内容,如果未能解决你的问题,请参考以下文章