Linux は、スタックに割り当てられている場合、使用されなくなったときにメモリを再利用しません。
ヒープ
ヒープに 1GB を動的に (malloc/mmap) 割り当てます。
- 割り当て前:
$トップ
仮想メモリ 1GB
常駐メモリ ~ 0
- メモリセット 1GB
$トップ
仮想メモリ 1GB
常駐メモリ 1GB
- 1GB の割り当て解除 (free/munmap) - 期待どおりに回収
$トップ
仮想メモリ 1GB
常駐メモリ ~ 0
スタック
スタックに 1GB を動的に割り当てます。
- 前:
$トップ
仮想メモリ 1GB
常駐メモリ ~ 0
- メモリセット 1GB
$トップ
仮想メモリ 1GB
常駐メモリ 1GB
- 1GB の割り当て解除 (スタックの巻き戻し) - 割り当て解除後でも、常駐メモリは 1GB のままです! なんで?
$トップ
仮想メモリ 1GB
常駐メモリ 1GB
スタックが常駐メモリをアンワインドするとき (物理ページはまだ使用中) はなぜですか?
ヒープ セグメントの割り当ては mmap で行われ、スタック セグメントの割り当ては mmap で行われます。では、なぜリクレイムの動作に違いがあるのでしょうか?