2016-07-24 106 views
1

malloc不允许任意对齐。我们可以做到这一点,但我们最终得到了不同的指针位置。免费要求原件。调整malloc指针

是否有任何方式通知malloc新指针,以便它可以自我调整,我们将不必存储旧的指针/偏移量?

+0

你的意思是相当于告诉'malloc'对齐? – Downvoter

+0

如果你改变了你的指针,那么就没有办法记住它或者恢复它,从而“释放”它。 –

+0

@Downvoter或多或少。我不能使用memaligned或类似的东西。我无法从旧的计算原始。 – AbstractDissonance

回答

2

C11引入了aligned_alloc,它支持指定对齐。它是定义支持对齐的实现,但在POSIX上它应该类似于posix_memalign(3),它支持两倍的任何两倍,即sizeof(void*)的倍数。

还可以考虑,如果常规malloc就足够了。对于所有分配,malloc具有_Alignof(max_align_t)的对齐。

如果C11不可用,则有posix_memalign(3)。如果你在Windows上,有一个_aligned_alloc从MSVC 2015开始或使用VirtualAlloc并分配一个页面对齐的缓冲区。

如果这两项都不起作用,您将不得不在malloc之上推出自己的解决方案。获取下一个对齐的地址,保存前两个字节的对齐。当调用你的自由包装器时,得到2个前面的字节,从指针中减去它们并释放结果。

1

好吧,我相信C11有这样的野兽

Defined in header <stdlib.h> 

void *aligned_alloc(size_t alignment, size_t size);