我正在决定是否应该使用memalign()而不是malloc(),因为对齐的内存会使我的工作更容易。我阅读了GNU文档http://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html ,其中提到函数memalign通过分配一个略大的块来工作。
我想知道那个“略大的块”的确切值。
逻辑上,所需的额外内存应该等于所需的对齐值。但我不确定是否有优化。
我正在决定是否应该使用memalign()而不是malloc(),因为对齐的内存会使我的工作更容易。我阅读了GNU文档http://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html ,其中提到函数memalign通过分配一个略大的块来工作。
我想知道那个“略大的块”的确切值。
逻辑上,所需的额外内存应该等于所需的对齐值。但我不确定是否有优化。
Posix是一个标准,而不是特定的代码集,但我们可以参考libc作为示例。
这里是posix_memalign()
在该实现中最初分配的内容。
mem = malloc (size + 2 * alignment);
通过这个精美的ASCII插图。
/*
______________________ TOTAL _________________________
/ \
+---------------+-------------------------+--------------+
| | | |
+---------------+-------------------------+--------------+
\____ INIT ____/ \______ RETURNED _______/ \____ END ___/
*/
然后,它会将分配的两端未使用的存储空间返回到堆中。
这意味着碎片可能会变得更糟,但使用的堆内存量相同。
mtrace
)。 - Useless