【问题标题】:How does top (Activity Monitor) update memory usage as the heap is written to? (C)当堆被写入时,top(活动监视器)如何更新内存使用情况? (C)
【发布时间】:2018-08-14 19:04:58
【问题描述】:

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

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

然而,在删除/压缩时,内存使用量会立即下降,就像代码释放内存一样。

top 如何跟踪分配范围内使用的“实际”内存?如果其余分配的空间无论如何都不能供其他进程使用,它为什么要这样做?

【问题讨论】:

  • 我不知道,但我猜 top 只不过是检索此信息的所有系统调用之上的一个漂亮的 ncurses 包装器。您的答案可能在内核内存管理实现细节中,而不是在顶部。
  • 这似乎是关于top 实用程序的问题,而不是编程问题。可能更适合 Unix/Linux 堆栈交换器。

标签: c memory-management


【解决方案1】:

大多数现代操作系统都会延迟分配实际内存,仅在尝试使用内存时才提供内存。您可以在不使用任何内存的情况下随心所欲地增加堆;唯一的作用是分配虚拟内存地址。

只有当你真正触摸一个页面时,例如通过写入它,内存才会真正分配给进程。

其中一个后果是malloc() 可以成功,即使没有可用的物理内存。

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

【讨论】:

    猜你喜欢
    • 2013-03-08
    • 2011-10-11
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2012-10-22
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多