可能重复:
When do we need to use posix_memalign instead of malloc ?
您何时需要“size
字节的内存,以使分配的基地址与alignment
”完全相同,而不仅仅是malloc()
?
我相信它是Linux下的memalign()
和Mac OS X / BSD下的posix_memalign()
。
答案 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控制器也需要正确对齐。