何时使用posix_melign/memlign

When is posix_memalign/memalign used?

本文关键字:memlign melign posix 何时使      更新时间:2023-10-16

可能重复:
我们什么时候需要使用posix_malign而不是malloc?

您什么时候需要"size字节的内存,以便分配的基地址是alignment的精确倍数"而不是简单的malloc()


我相信它是Linux下的memalign()和MacOSX/BSD下的posix_memalign()

最常见的用例之一是使用SIMD代码(SSE、AltiVec、AVX、Neon等)时,通常需要在SIMD矢量边界上对齐所有缓冲区(16字节或32字节对齐)。

另一个常见的对齐要求是虚拟内存页对齐(通常为4kB)。

最近弹出的一个原因是为了确保数据缓冲区结构/对象不共享缓存行。这减少了缓存刷新的需要。

Rgds,Martin

如果您需要比malloc提供的更严格的内存对齐。

malloc通常会返回一个对齐的指针,使其可以与任何基元类型(通常为8字节)一起使用。

然而,有时您需要在其他边界上对齐内存,在这种情况下,您需要memalign

一些特殊指令(例如SSE指令)需要正确对齐数据才能工作。如果您在内核模式下进行开发,一些DMA控制器也需要正确对齐。