调整malloc指针

时间:2016-07-24 18:00:46

标签: c malloc

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

有没有办法通知malloc新的指针,以便它可以调整自己,我们不必存储旧的指针/偏移量?

2 个答案:

答案 0 :(得分:2)

C11引入了aligned_alloc,它支持指定对齐方式。它的实现定义了支持哪些对齐,但是在POSIX上它应该像posix_memalign(3),它支持两个sizeof(void*)倍数的幂。

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

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

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

答案 1 :(得分:1)

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

Defined in header <stdlib.h>

void *aligned_alloc( size_t alignment, size_t size );