由C11 aligned_alloc分配的内存重新分配是否保持对齐?

Dre*_*wen 10 c memory-management realloc c11

考虑以下(C11)代码:

void *ptr = aligned_alloc(4096, 4096);
... // do something with 'ptr'
ptr = realloc(ptr, 6000);
Run Code Online (Sandbox Code Playgroud)

由于ptr指向的内存具有4096字节的对齐aligned_alloc,是否(读取:是否保证)在(成功)调用之后保持该对齐realloc?或者内存可以恢复为默认对齐?

Dav*_*nan 7

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

  • 允许@R .. realloc将其优化为增长或缩小,从而避免使用memcpy (6认同)
  • 是的,但这是一种不违反形式等同性的优化.为了推理关于对齐的所需行为,有必要认为一切都像在C标准定义的抽象机器中那样发生,而不是在预期发生的优化方面. (5认同)
  • 形式上,`realloc`与`malloc` +`memcpy` +`free`没有区别. (3认同)