mallocが必要以上のメモリを割り当てるのはなぜですか?

mallocが必要以上のメモリを割り当てるのはなぜですか?

使用時に要求があっても、関数が常に最小値を割り当てることを発見しましたmalloc()。なぜそんなに多くのメモリが割り当てられますか?メモリサイズを割り当てることができます。ページブロックサイズが 。sbrk()malloc()135168 bytes1 bytemalloc()4 kB4 kB

しきい値が使用されているので、代わりに128 * 1024 = 131072 bytes割り当ててはいけませんか?135168 bytes128 kBmmap()

悩みます。私は内部の仕組みを深く理解していませんmalloc()

ご協力ありがとうございます。

ベストアンサー1

これは純粋に最適化です。 malloc() を一度使用すると、複数回使用すると推測されます。したがって、プロセススペースを拡張するための初期システムコールがあります(これは仮想アドレスマッピングに影響を与え、比較的高価です)。

要求された金額はこの領域から取得され、そのアドレスは malloc() 呼び出しから返されます。残りは使用可能リスト(最初は空)に追加されます。

stdio を使用する場合 (例: sbrk() の初期値を印刷する場合) stdio は、標準出力用に FILE* で使用するバッファーの最初の malloc() (使用可能リストから独自の malloc(1)) を生成します。になります。

mmap() は大規模な単一割り当てにのみ使用されます。小規模な割り当てでは、簡単に分割できる利用可能なリスト領域を使用します。

おすすめ記事