【问题标题】: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 相同:stackoverflow.com/questions/9078259/…

标签: c memory-management realloc c11


【解决方案1】:

对齐不与指针保持一致。当您调用 realloc 时,您只能依赖 realloc 保证的对齐方式。您需要使用aligned_alloc 来执行任何重新分配。

【讨论】:

  • 形式上,reallocmalloc+memcpy+free 没有区别。
  • @R.. realloc 允许将其优化为增长或收缩,从而避免 memcpy
  • 是的,但这是一种不违反形式等价的优化。为了推理与对齐相关的所需行为,最好将所有事情都按照 C 标准定义的抽象机器中的情况进行思考,而不是根据您期望发生的优化来进行思考。
  • @R..:这是不同的。您所描述的是最坏情况下会发生什么;你绝对不能假设最坏的情况总是会发生。即使在抽象机器中,这也不会总是发生。
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 2010-12-26
  • 2011-11-28
  • 1970-01-01
相关资源
最近更新 更多