天天看點

程式在記憶體的存儲

     今天忽然想到個問題,我們寫的程式是怎麼存儲在記憶體裡的?

計算機使用的是二進制,計算機為存儲、組織這些二進制的資料定義了規則,也就是資料結構,常用的資料結構有數組、堆、棧、連結清單、散清單、隊列等等。程式設計語言又把這些資料結構抽象成了自己的資料結構,數組、字典、哈希表、隊列等等。代碼使用的資料結構最後通過計算機的資料結構存儲在記憶體中。

程式存儲在虛拟機向作業系統要來的記憶體中,一般分為兩個地方:程式存儲區、資料存儲區。我們寫的代碼會儲存到程式存儲區裡面;而定義的一些全局變量,靜态變量,局部變量之類的,就儲存到資料存儲區。程式員操作的主要是資料存儲區。堆和棧都是屬于這個區。

  •   棧,是系統自動配置設定和回收的,是以是有序、規範的。
  • 堆,是程式員配置設定的,一般由虛拟機回收,是以是自由、靈活的。
  •  棧使用的是一級緩存, 他們通常都是被調用時處于存儲空間中,調用完畢立即釋放。
  • 堆則是存放在二級緩存中,生命周期由虛拟機的垃圾回收算法來決定(并不是一旦成為孤兒對象就能被回收)。
  • 棧的優勢是,存取速度比堆要快,僅次于直接位于CPU中的寄存器。
  • 堆棧溢出指的是棧記憶體溢出,記憶體溢出指的是堆記憶體溢出。(一般來說)

繼續閱讀