Linux、特にubuntuのglibc 2.17バージョンのヒープ管理の側面が疑問に思っています。
各ヒープの最後のブロック(最上位ブロックまたはワイルドブロック)は空になる傾向があり、一部のビットが切り捨てられて追加され、必要に応じてサイズが変更されることがわかりますsbrk()
(最初のヒープの場合は?)。
しかし、私が見つけることができないのは:ワイルドブロックを割り当てることは可能ですか?つまり、ヒープの最も高いブロックが使用中であるという意味ですか?
この違いは理論的な重要性しか持っていないようですが、外部メタデータなしでメモリ内ヒープを分析できるかどうかについていくつかの意味があります。
答え1
私はglibcの実装を知りませんが、Malloc 作成者: Doug Lea答えは「いいえ」です。リンクから引用するには:
ワイルドブロックを他のすべてのブロックよりも「より大きい」として扱い(システム制限によって異なります)、最高優先順位スキャンに使用します。これにより、他のブロックがない場合にのみワイルドブロックが常に使用され、予防可能な断片化を防ぐことができます。
私は不変性が技術的に違反する可能性がある1つのケースがあると思います。つまり、ユーザーが残っているすべてのシステムメモリのサイズになるブロックを割り当てる場合です。
野生を管理する方法のより深い議論Wilson; Johnstone; Boles:「動的ストレージ割り当て:アンケートと重要なレビュー」国際メモリ管理勤務週間、1995。