簡體   English   中英

它在C中創建一個數組,當從內存中的程序出來時會發生什么?

[英]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垃圾收集器將這種安排存儲在內存清除記錄中。 他們留在記憶中還是被釋放?

當進程退出時,操作系統將釋放該進程正在使用的所有內存。

(這不適用於某些小型嵌入式操作系統。)

程序的內存由操作系統管理,因此在程序退出時無論如何都將釋放它。

無論如何,正如您所寫的那樣,您的分配可能是

  • 靜態且不在任何函數之外(因此不會像在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(),則在程序退出時將“釋放”該數組。

  1. 通常,操作系統不允許您使用int a[10000000000000000000]
  2. 它們的價值留在記憶中。 但是內存將被返回。

簡而言之,內存將在程序末尾釋放。

在c中,如果您定義a [1000]之類的數組,則它將在堆棧部分中分配,並且當程序存在時它將自動釋放內存。 但是,如果您動態分配(使用malloc),則必須使用free(array)釋放內存。 陣列的最大大小取決於系統RAM大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM