当堆被写入时,top(活动监视器)如何更新内存使用情况? (C)

时间:2018-08-14 19:04:58

标签: c memory-management

我的朋友实现了一个动态数组来学习C。当内存不足时,他将分配的空间加倍。

我们看到他的测试程序逐个字符地写入了4 GB的随机字符(以避免内存压缩)。但是活动监视器(在Mac上,基于top)显示内存使用率逐渐增加,而不是每次扩展都增加一倍。

但在删除/压缩后,内存使用量将立即下降,完全与代码释放内存一样。

顶部如何跟踪分配范围内使用的“实际”内存?如果其余分配的空间仍然无法供其他进程使用,为什么还要这样做呢?

1 个答案:

答案 0 :(得分:3)

大多数现代操作系统都延迟分配实内存,仅在尝试使用它时才提供内存。您可以在不使用任何内存的情况下根据需要增加堆。唯一的效果就是分配虚拟内存地址。

仅当您实际触摸页面(例如通过写入页面)时,才真正为进程分配内存。

后果之一是,即使没有可用的物理内存,malloc()也会成功。

如果您实际使用top,则会看到虚拟内存分配(这只是虚拟地址的分配)和实际使用的内存(“驻留集”)。