gpt4 book ai didi

c - top(事件监视器)如何在写入堆时更新内存使用情况? (C)

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:02 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

只有当您实际触摸页面时,例如通过写入页面,内存才会真正分配给进程。

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

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

关于c - top(事件监视器)如何在写入堆时更新内存使用情况? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848243/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com