我正在尝试决定是否应该在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.
我想知道“稍大一些块”的确切值。
逻辑上认为所需的额外内存应该等于所需的对齐值。但我不确定是否有优化。
答案 0 :(得分:3)
Posix是一个标准,而不是一组特定的代码,但我们可以看一下libc的例子。
以下是posix_memalign()
最初在该实现中分配的内容。
mem = malloc (size + 2 * alignment);
使用这个漂亮的ASCII插图。
/*
______________________ TOTAL _________________________
/ \
+---------------+-------------------------+--------------+
| | | |
+---------------+-------------------------+--------------+
\____ INIT ____/ \______ RETURNED _______/ \____ END ___/
*/
然后在分配的任一端返回堆未使用的存储。
这意味着碎片可能会变得更糟,尽管使用的堆内存是相同的数量。