我在想......假设我已经动态分配了像
这样的数组array = calloc(n, sizeof(float));
或类似的东西。而且,如果n是一个非常大的数字(约100万,为了论证),如果我最后没有free()
,那么Linux需要多长时间才能清除堆内存?我知道任何操作系统都会绕过并清除未释放和未使用的堆内存区域。但我认为这需要多长时间才能取决于操作系统。
答案 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杀手杀死。