[英]It creates an array in C, What happen when come out of the program in the memory?
我對此表示懷疑,您假設有一個包含十億個元素的數組,並且按如下方式創建該數組:
int array[1000] = {1,2, ..., n.}
然后您完成程序。
不像Java那樣,機器Java垃圾收集器將這種安排存儲在內存清除記錄中。 他們留在記憶中還是被釋放?
當進程退出時,操作系統將釋放該進程正在使用的所有內存。
(這不適用於某些小型嵌入式操作系統。)
程序的內存由操作系統管理,因此在程序退出時無論如何都將釋放它。
無論如何,正如您所寫的那樣,您的分配可能是
真正的比較就像
int *array = malloc(sizeof(int)*1000);
這將駐留在內存中,直到調用free(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.
編輯:在最后一種情況下,如果用main替換foo(),則在程序退出時將“釋放”該數組。
int a[10000000000000000000]
。 簡而言之,內存將在程序末尾釋放。
在c中,如果您定義a [1000]之類的數組,則它將在堆棧部分中分配,並且當程序存在時它將自動釋放內存。 但是,如果您動態分配(使用malloc),則必須使用free(array)釋放內存。 陣列的最大大小取決於系統RAM大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.