Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当堆写入时,top(活动监视器)如何更新内存使用率?(C)_C_Memory Management - Fatal编程技术网

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

当堆写入时,top(活动监视器)如何更新内存使用率?(C),c,memory-management,C,Memory Management,我的朋友实现了一个动态数组来学习C语言。当分配的内存不足时,他会将分配的空间加倍 我们看着他的测试程序一个字符一个字符地写4GB的随机字符(以避免内存压缩)。但是活动监视器(在Mac上,基于top)显示内存使用量逐渐增加,而不是每次扩展都增加一倍 然而,在删除/压缩时,内存使用会立即下降,就像代码释放内存一样 在分配的范围内,top track“实际”内存是如何使用的?如果分配的剩余空间无法供其他进程使用,它为什么会这样做呢?大多数现代操作系统都会延迟分配实际内存,仅在尝试使用时才提供内存。您可

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

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

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


在分配的范围内,top track“实际”内存是如何使用的?如果分配的剩余空间无法供其他进程使用,它为什么会这样做呢?

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

只有当你真的触摸到一个页面时,例如通过写入页面,内存才会被实际分配给这个过程

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


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

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