3

整列されたメモリが私の仕事を容易にするので、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.その「やや大きなブロック」の正確な値を知りたいと述べています。 .

論理的に考えると、必要な余分なメモリは、必要なアライメントの値と等しくなるはずです。しかし、それ以上の最適化があるかどうかはわかりません。

4

1 に答える 1

4

Posix は標準であり、特定のコード セットではありませんが、例として libc を見ることができます。

posix_memalign()その実装で最初に割り当てるものは次のとおりです。

mem = malloc (size + 2 * alignment);

この美しいアスキー イラスト付き。

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

   */

次に、割り当ての両端にある未使用のストレージをヒープに戻します。

これは、使用されるヒープ メモリが同じ量であっても、断片化が悪化する可能性があることを意味します。

于 2013-04-03T21:25:10.243 に答える