記憶體5種型別

2021-06-26 12:58:20 字數 1279 閱讀 4930

1、bss段:bss段(bss segment)通常是指用來存放程式中

未初始化的全域性變數

的一塊記憶體區域。bss是英文block started by symbol的簡稱。bss段屬於靜態記憶體分配。

2、資料段:資料段(data segment)通常是指用來存放程式中

已初始化的全域性變數

的一塊記憶體區域。資料段屬於靜態記憶體分配。

3、**段:**段(code segment/text segment)通常是指用來存放程式執行**的一塊記憶體區域。這部分區域的大小在程式執行前就已經確定,並且記憶體區域通常屬於唯讀, 某些架構也允許**段為可寫,即允許修改程式。在**段中,也有可能包含一些唯讀的常數變數,例如字串常量等。

4、堆(heap):堆是用於存放程序執行中被動態分配的記憶體段,它的大小並不固定,可動態擴張或縮減。當程序呼叫malloc等函式分配記憶體時,新分配的記憶體就被動態新增到堆上(堆被擴張);當利用free等函式釋放記憶體時,被釋放的記憶體從堆中被剔除(堆被縮減)

5、棧(stack):棧又稱堆疊, 是使用者存放程式臨時建立的區域性變數,也就是說我們函式括弧「{}」中定義的變數(但不包括static宣告的變數,static意味著在資料段中存放變數)。除此以外,在函式被呼叫時,其引數也會被壓入發起呼叫的程序棧中,並且待到呼叫結束後,函式的返回值也會被存放回棧中。由於棧的先進先出特點,所以棧特別方便用來儲存/恢復呼叫現場。從這個意義上講,我們可以把堆疊看成乙個寄存、交換臨時資料的記憶體區。

在c 中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。 

棧,就是那些由編譯器在需要的時候分配,在無需的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數、函式引數等。 

堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。假如程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。 

自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,但是他是用free來結束自己的生命的。 

全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c 裡面沒有這個區分了,他們一起占用同一塊記憶體區。 

常量儲存區,這是一塊比較特別的儲存區,他們裡面存放的是常量,不允許修改(當然,您要通過非正當手段也能夠修改,而且方法很多,在《

const的思考

》一文中,我給出了6種方法) 

5種型別的程式猿

在我的 旅程和程式設計冒險中。我遇到過非常多奇怪的敵人。以及陌生的盟友。我發現至少有五種不同型別的 戰士,有的人能成為並肩合作的戰友,而有些人似乎僅僅能襯托我的每個計畫。只是。他們在軟體開發這個萬神殿中也有著自己的地位。假設沒有這些不同程式設計風格 的合理搭配,那麼你的專案要麼須要非常長時間才幹完畢...

5種型別快取比較說明

1.存在於客戶端還是服務端 viewstate 基於webform cookie session 在服務端的儲存方式包括4中,記憶體 最常用 asp.net state service windows服務 資料庫 自定義狀態提供程式 2.有效時間 只要頁面關閉,其狀態就失效 包括臨時cookie和永...

程式設計師的5種型別

在我的 旅程和程式設計經歷中,已經遭遇很多奇特的對手,還有更為奇特的盟友。我至少發現有5種 勇士,有些是出色的戰友,其他則似乎都在攪黃我的每個計畫。不過他們都在軟體開發的萬神殿上都有一席之地。如果沒有不同程式設計風格的良好組合,你可能會發現你的專案要不就是耗時過長,要不就是太不穩定或太過完美而無人去...