我想知道......假设我已经动态分配了一个数组
array = calloc(n, sizeof(float));
或类似的东西。此外,如果 n 是一个非常大的数字(~ 100 万,为了争论),如果我最后没有清除堆内存,Linux 需要多长时间free()
?我知道任何操作系统都会四处走动并清除未释放和未使用的堆内存区域。但我认为这需要多长时间取决于操作系统。
我想知道......假设我已经动态分配了一个数组
array = calloc(n, sizeof(float));
或类似的东西。此外,如果 n 是一个非常大的数字(~ 100 万,为了争论),如果我最后没有清除堆内存,Linux 需要多长时间free()
?我知道任何操作系统都会四处走动并清除未释放和未使用的堆内存区域。但我认为这需要多长时间取决于操作系统。
如果一个进程被终止(自愿或强制),它的所有堆内存将立即被包括 Windows、Linux 和 OS X 在内的操作系统回收。
当您的进程终止时,它将释放内存。当一个进程终止时,所有内存、打开的文件句柄和它打开的任何资源都被系统关闭。
malloc/calloc 不太可能满足如此大量的内存请求。它们很可能返回 NULL。
I know any OS would go around and clear un-freed and unused heap memory areas.
不,操作系统不会寻找未使用的堆区域。假设您已经成功地动态分配了一些内存(无论它是小还是大),只要进程正在运行,操作系统就不会取消分配内存,如果您自己不free
这样做的话。
当一个进程不断请求内存时,它可能会被 Linux 上的 Out Of Memory 杀手杀死。