我有这个疑问,你有一个拥有10亿个元素的数组,你可以按如下方式创建数组:
int array[1000] = {1,2, ..., n.}
然后你完成了这个程序。
不像java那里的机器java垃圾收集内存清理记录关于这种安排的存储。 他们留在记忆中还是被释放?
答案 0 :(得分:4)
当进程退出时,操作系统将释放进程正在使用的所有内存。
(这不适用于某些小型嵌入式操作系统。)
答案 1 :(得分:1)
程序的内存由操作系统管理,因此在程序退出的任何情况下都会释放。
无论如何,你所分配的内容可能是
真正的比较就像是
int *array = malloc(sizeof(int)*1000);
这将驻留在内存中,直到调用free(array)
或程序退出。
答案 2 :(得分:1)
如果你这样做
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.
编辑:在最后一种情况下,如果用main替换foo(),那么当程序退出时,数组将被“释放”。
答案 3 :(得分:0)
int a[10000000000000000000]
。答案 4 :(得分:0)
简单地说,内存将在程序结束时释放。
答案 5 :(得分:0)
在c中,如果您将数组定义为[1000],那么它将在堆栈部分中分配,并且它会在程序存在时自动释放内存。但是如果你动态分配(通过使用malloc),那么你必须使用free(数组)来释放内存。 阵列的最大大小取决于系统RAM大小。