malloc不允许任意对齐。我们可以做到这一点,但我们最终得到了不同的指针位置。免费要求原件。调整malloc指针
是否有任何方式通知malloc新指针,以便它可以自我调整,我们将不必存储旧的指针/偏移量?
malloc不允许任意对齐。我们可以做到这一点,但我们最终得到了不同的指针位置。免费要求原件。调整malloc指针
是否有任何方式通知malloc新指针,以便它可以自我调整,我们将不必存储旧的指针/偏移量?
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个前面的字节,从指针中减去它们并释放结果。
好吧,我相信C11有这样的野兽
Defined in header <stdlib.h>
void *aligned_alloc(size_t alignment, size_t size);
你的意思是相当于告诉'malloc'对齐? – Downvoter
如果你改变了你的指针,那么就没有办法记住它或者恢复它,从而“释放”它。 –
@Downvoter或多或少。我不能使用memaligned或类似的东西。我无法从旧的计算原始。 – AbstractDissonance