何时使用posix_melign/memlign
When is posix_memalign/memalign used?
可能重复:
我们什么时候需要使用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控制器也需要正确对齐。