我有这个疑问,你假设有一个包含十亿个元素的数组,你创建的数组如下:
int array[1000] = {1,2, ..., n.}
然后你完成程序。
不像java机器的java垃圾收集内存清理记录关于存储的这种安排。 它们留在内存中还是被释放?
当进程退出时,操作系统会释放进程正在使用的所有内存。
(这不适用于某些小型嵌入式操作系统。)
程序的内存由操作系统管理,因此在程序退出时它会在任何情况下被释放。
在任何情况下,正如它所写的那样,您的分配可能是
真正的比较是这样的
int *array = malloc(sizeof(int)*1000);
这将驻留在内存中,直到 afree(array)
被调用或程序退出。
如果你这样做
if (true) {
int array[1000] = {1,2,3};
//...
}
// array[1000] "freed" here.
然后,当您退出“if”大括号时,内存将被释放。这是因为内存驻留在堆栈上,“分配”只是堆栈指针的移动。当范围退出时,堆栈指针返回到进入范围之前的位置。所以在这种情况下,分配和释放几乎是免费的(性能方面),假设你的堆栈足够大,可以容纳额外的 1000 个整数。在某些嵌入式系统上,它不会,并且您的应用程序会崩溃。
同样适用
int foo( int x )
{
int array[1000] = {1,2,3};
// ...
return array[0];
}
// array[] "freed" here.
编辑:在最后一种情况下,如果将 foo() 替换为 main,则程序退出时数组将被“释放”。
简单来说就是在程序结束时释放内存。
int a[10000000000000000000]
.在 c 中,如果您定义像 a[1000] 这样的数组,那么它将在堆栈部分分配,并在程序存在时自动释放内存。但是如果你动态分配(通过使用 malloc),那么你必须使用 free(array) 来释放内存。阵列的最大大小取决于您的系统 RAM 大小。