Linux需要多长时间才能清除堆内存

时间:2012-11-01 09:20:00

标签: c arrays malloc heap calloc

我在想......假设我已经动态分配了像

这样的数组
array = calloc(n, sizeof(float));

或类似的东西。而且,如果n是一个非常大的数字(约100万,为了论证),如果我最后没有free(),那么Linux需要多长时间才能清除堆内存?我知道任何操作系统都会绕过并清除未释放和未使用的堆内存区域。但我认为这需要多长时间才能取决于操作系统。

3 个答案:

答案 0 :(得分:2)

如果进程终止(自愿或强制进程),其所有堆内存将立即被包含Windows,Linux和OS X的操作系统回收

答案 1 :(得分:0)

当您的进程终止时,它会释放内存。当进程终止时,系统将关闭所有内存,打开文件句柄及其打开的所有资源。

答案 2 :(得分:0)

malloc / calloc不太可能满足如此大量的内存请求。它们可能会返回NULL。

I know any OS would go around and clear un-freed and unused heap memory areas.

不,操作系统不会查找未使用的堆区域。假设您已成功动态分配了一些内存(无论它是小还是大),只要进程正在运行,操作系统就不会对内存进行解除分配,如果您自己没有free它。

当一个进程不断请求内存时,它可能被Linux上的Out Of Memory杀手杀死。