malloc不允许任意对齐。我们自己也可以这样做,但我们最终会得到一个不同的指针位置。免费需要原件。
有没有什么方法可以通知malloc新指针,这样它就可以自我调整,而不必存储旧指针/偏移量?
C11引入了支持指定对齐的aligned_alloc
。它的实现定义了支持哪些对齐,但在POSIX上,它应该像posix_memalign(3)
一样,支持sizeof(void*)
的倍数的任何二次幂。
还要考虑,如果常规malloc
就足够了。对于所有分配,CCD_ 5具有CCD_ 6的对准。
如果C11不可用,则存在posix_memalign(3)
。如果您在Windows上,则有一个以MSVC 2015开头的_aligned_alloc
,或者使用VirtualAlloc
并分配一个页面对齐的缓冲区。
如果这两种方法都不起作用,您将不得不在malloc
之上推出自己的解决方案。获取下一个对齐的地址,保存前两个字节的对齐方式。调用免费包装器时,获取前面的2个字节,从指针中减去它们并释放结果。
好吧,我相信C11有这样一个野兽
Defined in header <stdlib.h>
void *aligned_alloc( size_t alignment, size_t size );