如果在堆栈上分配,Linux 在不再使用时不会回收内存。
堆
我在堆上动态分配(malloc/mmap)1GB。
- 分配前:
$顶部
虚拟内存 1GB
常驻内存 ~ 0
- 内存集 1GB
$顶部
虚拟内存 1GB
常驻内存 1GB
- 1GB 的 deallocate (free/munmap) - 按预期回收
$顶部
虚拟内存 1GB
常驻内存 ~ 0
堆
我在堆栈上动态分配 1GB。
- 前:
$顶部
虚拟内存 1GB
常驻内存 ~ 0
- 内存集 1GB
$顶部
虚拟内存 1GB
常驻内存 1GB
- 解除分配(堆栈展开) 1GB - 常驻内存仍然是 1GB,即使在解除分配之后!为什么?
$顶部
虚拟内存 1GB
常驻内存 1GB
为什么,当堆栈展开驻留内存时(物理页面仍在使用中)?
堆段分配是用 mmap 完成的,而堆栈段分配是用 mmap 完成的——那么为什么回收的行为会有所不同呢?