代码之家  ›  专栏  ›  技术社区  ›  Andrew Cheong

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

  •  1
  • Andrew Cheong  · 技术社区  · 6 年前

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

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

    然而,在删除/压缩时,内存使用率将立即下降,正如代码释放内存一样。

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   rici    6 年前

    大多数现代操作系统都懒散地分配实际内存,只在试图使用时才提供内存。您可以在不使用任何内存的情况下任意增加堆;唯一的效果是分配虚拟内存地址。

    只有当你实际接触到一个页面时,例如通过写入它,记忆才被赋予这个过程。

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

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