使用時に要求があっても、関数が常に最小値を割り当てることを発見しましたmalloc()
。なぜそんなに多くのメモリが割り当てられますか?メモリサイズを割り当てることができます。ページブロックサイズが 。sbrk()
malloc()
135168 bytes
1 byte
malloc()
4 kB
4 kB
しきい値が使用されているので、代わりに128 * 1024 = 131072 bytes
割り当ててはいけませんか?135168 bytes
128 kB
mmap()
悩みます。私は内部の仕組みを深く理解していませんmalloc()
。
ご協力ありがとうございます。
答え1
これは純粋に最適化です。 malloc() を一度使用すると、複数回使用すると推測されます。したがって、プロセススペースを拡張するための初期システムコールがあります(これは仮想アドレスマッピングに影響を与え、比較的高価です)。
要求された金額はこの領域から取得され、そのアドレスは malloc() 呼び出しから返されます。残りは使用可能リスト(最初は空)に追加されます。
stdio を使用する場合 (例: sbrk() の初期値を印刷する場合) stdio は、標準出力用に FILE* で使用するバッファーの最初の malloc() (使用可能リストから独自の malloc(1)) を生成します。になります。
mmap() は大規模な単一割り当てにのみ使用されます。小規模な割り当てでは、簡単に分割できる利用可能なリスト領域を使用します。