我想知道...假设我已经动态分配了一个像
的数组array = calloc(n, sizeof(float));
或类似的东西。而且,如果n是一个非常大的数字(出于争论,约有100万个),那么如果我不在结尾不 free()
,linux需要多长时间才能清除堆内存?我知道任何操作系统都会四处走动,并清除未经封闭和未使用的堆内存区域。但是我认为这样做需要多长时间。
如果一个过程被终止(自愿或武力),则将通过包括Windows,Linux和OS X的操作系统立即收回其所有堆内存。
它在您的进程终止时会释放内存。当过程终止时,所有内存,打开的文件处理和其打开的任何资源都被系统关闭。
malloc/calloc不太可能满足大量的内存请求。他们可能会返回null。
I know any OS would go around and clear un-freed and unused heap memory areas.
不,OS不寻找未使用的堆区域。假设您已经成功地通过动态分配了一些内存(无论是大还是大),只要该过程正在运行,OS就不会将内存分配分配,如果您不自己free
,则OS不会将内存分配。
当一个过程不断请求内存时,它可能会被Linux上的内存杀手杀死。