【问题标题】:how much extra memory does posix_memalign() take?posix_memalign() 需要多少额外的内存?
【发布时间】:2013-04-03 21:20:17
【问题描述】:

我正在尝试决定是否应该使用 memalign() 而不是 malloc(),因为对齐的内存会使我的工作更轻松。我在这里阅读了 GNU 文档 (http://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html),其中提到 The function memalign works by allocating a somewhat larger block. 我想知道那个“更大的块”的确切值。

逻辑上认为所需的额外内存应该等于所需的对齐值。但我不确定是否对此进行了优化。

【问题讨论】:

  • 你可以编写一个泄漏内存的玩具程序,然后在 valgrind 下运行它(或者看看 mtrace 是否适用于这些调用)
  • @Useless:尝试了以下方法:void *m; posix_memalign(&m, 512, 1024); valigrind 说它丢失了 1024。我尝试了不同的对齐方式,如 8、16、32 和不同的内存大小,如 512、1024,它说的是一样的。所以不需要额外的内存?
  • @Useless:DrewDormann 刚刚确认了

标签: c++ memory-management posix


【解决方案1】:

Posix 是一个标准,不是特定的代码集,但我们可以看看 libc 的例子。

这是posix_memalign() 在该实现中最初分配的内容。

mem = malloc (size + 2 * alignment);

有了这个漂亮的 ASCII 插图。

    /*
      ______________________ TOTAL _________________________
     /                                                      \
    +---------------+-------------------------+--------------+
    |               |                         |              |
    +---------------+-------------------------+--------------+
    \____ INIT ____/ \______ RETURNED _______/ \____ END ___/

   */

然后它将分配两端的未使用存储返回到堆

这意味着碎片可能会变得更糟,尽管使用的堆内存相同数量

【讨论】:

猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多