【发布时间】:2019-08-13 04:00:31
【问题描述】:
我在我的测试程序中观察到以下行为:
我正在为 1 MB 执行 malloc(),然后在 sleep(10) 之后执行 free()。我这样做了五次。我正在观察程序运行时top 的内存消耗。
一旦free()-d,我预计程序的虚拟内存 (VIRT) 消耗将减少 1 MB。但实际上并非如此。它保持稳定。这种行为的解释是什么? malloc() 在分配内存时会做一些保留吗?
【问题讨论】:
-
@Useless 这个问题比旧问题有更好的答案,所以我打破惯例,将旧问题标记为这个问题的副本。
-
我认为几乎所有 malloc/free 实现都使用一些内部管理,这些管理确实请求更大的块并机会主义地释放它们。这可以使用
brk(2)或 mmap。这也意味着页面在被触摸之前可能实际上并没有被使用(有时甚至在空闲时未提交,因此虚拟或数据段大小并不那么重要)
标签: c malloc free dynamic-memory-allocation