3

我正在尝试决定是否应该使用 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.我想知道那个“更大的块”的确切值.

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

4

1 回答 1

4

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

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

mem = malloc (size + 2 * alignment);

有了这个漂亮的 ASCII 插图。

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

   */

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

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

于 2013-04-03T21:25:10.243 回答