对齐 malloc 和标准 malloc 之间的区别?

bla*_*afe 5 malloc ubuntu gcc c11 ubuntu-16.04

我是 malloc 和对齐 malloc 的新手。我知道如何使用它们。但是,我不知道在什么情况下我们应该使用对齐的 malloc 而不是标准的 malloc。你能给我解释一下吗?

pax*_*blo 6

glibc文档相当清楚地说明了您应该在哪里使用aligned_alloc

mallocGNU 系统返回的块的地址realloc始终是 8 的倍数(在 64 位系统上是 16 的倍数)。如果您需要一个地址是 2 的更高幂的倍数的块,请使用aligned_allocposix_memalign

C 标准已经保证将为malloc任何标准类型返回适当对齐的内存块,但在某些情况下您可能希望或需要更严格的对齐。

作为一个例子,我似乎记得 SSE2 (SIMD) 指令需要其数据在 16 字节边界上对齐,因此即使在仅保证与 8 字节边界对齐的aligned_alloc系统上,您也可以使用它来提供这一点。malloc