posix_memalign()需要多少额外内存?

时间:2013-04-03 21:20:17

标签: c++ memory-management posix

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

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

1 个答案:

答案 0 :(得分:3)

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

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

mem = malloc (size + 2 * alignment);

使用这个漂亮的ASCII插图。

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

   */

然后在分配的任一端返回堆未使用的存储。

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