似乎 posix_memalign
让您选择自定义的对齐方式
,但什么时候需要这样做?
malloc
内部已经做好了对齐工作。
更新
我问这个的确切原因是因为我看到 nginx 这样做,ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
,这里 NGX_POOL_ALIGNMENT
被定义为 16
,nginxs.googlecode.com/svn-history/trunk/src/core/ngx_palloc.c
最佳答案
基本上,如果你需要比 malloc 更严格的对齐方式。 Malloc 通常返回一个对齐的指针,它可以与任何原始类型一起使用(在普通桌面计算机上通常为 8 个字节)。
但是,有时您需要在其他边界上对齐内存,例如 4K 对齐等。在这种情况下,您将需要 memalign
。
你会需要这个,例如,
- 在编写内存管理器(例如垃圾收集器)时。在这种情况下,有时使用按较大块大小对齐的内存会很方便。这样,您可以将所有对象共有的元数据存储在分配区域底部的给定 block 中,并通过屏蔽对象指针的最低有效位来简单地访问它。
- 当与硬件接口(interface)时(我自己从来没有这样做过,但是 IIRC,某些类型的 block 设备需要对齐内存)。有关详细信息,请参阅 n.m. 的回答。
关于c - 我们什么时候需要使用 posix_memalign 而不是 malloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6410609/