c - 我们什么时候需要使用 posix_memalign 而不是 malloc?

标签 c alignment

似乎 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/

相关文章:

css - Sublime Text 中的对齐插件不适用于 style.less(less 文件)

winforms - 如何右对齐菜单中的快捷键?

memory-management - VirtualAlloc对齐

html - 对于下面给出的代码,在同一行中对齐复选框和输入文本

C++ Declspec 对齐

c - 当 x 为负时,!x 是否等于真?

c - 在 C 中如何在函数中声明此参数?

java - 如何在用 C 编写的服务器程序中反序列化 Java 对象?

c - 为什么在 arm-none-eabi GCC 上将 `uint32_t` 类型定义为 `unsigned long`,以及如何更改它?

c++ - 使用指针替换 C 字符串中的字符