我是malloc和对齐malloc的新手。我知道如何使用它们。然而,我不知道在哪种情况下我们应该使用对齐malloc而不是标准malloc。你能给我解释一下吗?
glibc
文档非常清楚地说明了应该在哪里使用aligned_alloc
:
GNU系统中
malloc
或realloc
返回的块地址总是8的倍数(或64位系统中的16)。如果你需要一个块的地址是大于2的倍数,使用aligned_alloc
或posix_memalign
。
C标准已经保证malloc
将为任何标准类型返回一个适当对齐的内存块,但可能在某些情况下你想要或需要更严格的对齐。
作为一个例子,我似乎记得SSE2 (SIMD)指令需要他们的数据在16字节边界上对齐,所以你可以使用aligned_alloc
给你,即使在malloc
只保证对齐到8字节边界的系统上。