何时使用posix_memalign / memalign?

时间:2011-06-20 17:58:54

标签: c++ c linux memory posix

  

可能重复:
  When do we need to use posix_memalign instead of malloc ?

您何时需要“size字节的内存,以使分配的基地址与alignment”完全相同,而不仅仅是malloc()


我相信它是Linux下的memalign()和Mac OS X / BSD下的posix_memalign()

4 个答案:

答案 0 :(得分:2)

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

RGDS, 马丁

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

如果您需要严格的内存对齐而不是malloc提供的内存对齐。

malloc通常会返回一个指针对齐,以便它可以与任何基本类型(通常是8个字节)一起使用。

但是,有时你需要在其他边界上对齐内存,在这种情况下,你需要memalign

答案 3 :(得分:0)

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