記憶體管理分類

2021-05-23 19:42:03 字數 1719 閱讀 2357

在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c++記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。

在c++

程式中,把記憶體分為4

類,程式儲存區、靜態資料儲存區、執行時棧、自由儲存區或堆:

1、程式儲存區

包含所有函式及成員函式的機器指令。函式一旦被編譯,即被編譯為特定得機器指令,存放在程式儲存區。當程式執行時,從內從中讀取並執行指令。這部分記憶體不允許更改,在一般情況下,指標不會指向記憶體**段中的位置。但也有特殊,如指向函式的指標,其指向即為程式儲存區存放該函式的機器指令的位置。

2、靜態資料儲存區

此段存放所有的全域性變數,以及由static

修飾符宣告的任意區域性變數、或類資料成員。其中全域性變數是指在函式或類作用域之外定義的變數,通過賦值或建構函式初始化。在main

函式開始執行之前,完成對全域性變數的初始化。像全域性變數一樣,static

定義的變數同樣只需分配一次記憶體,而且要在main

開始執行之前對其進行初始化,且每個名字只能分配乙個值。之後該變數將一直存在直到執行結束。

3、執行時棧

執行時棧是指程式執行時使用的棧,使用棧來儲存程式執行過程中的一些系統指標。

例如,呼叫函式時儲存引數和返回位址的指標。當要呼叫函式時,程式先將這返回位址指標壓棧,然後程式跳轉至呼叫函式執行,函式返回後從棧中彈出位置指標找到呼叫函式前的位置,以便繼續執行接下來的指令。

執行時棧還用來為函式中的引數、區域性變數分配記憶體,待函式返回時從棧中釋放記憶體,允許下一次函式呼叫重用該記憶體塊。

執行時棧可以實現記憶體的重用,增加了記憶體使用效率,但使用棧儲存區域性變數有兩個主要缺點:

a、棧記憶體值的生存期取決於函式的開始和結束。即函式返回時,棧中的值就不存在了。因此,任何返回區域性變數位址的操作都是不允許的。

b、棧為區域性變數分配記憶體時,必須已知變數要占用的記憶體空間的大小。

4、自由儲存區或堆

在不能預知物件大小的情況下,就不能使用棧記憶體。例如在不知道陣列包含的元素數的情況下,就不能使用棧未陣列分配記憶體。此時,就需要動態儲存分配。堆(自由儲存區)儲存由運算子new

顯式申請空間的大小。像全域性變數一樣,static

定義的變數同樣只需分配一次記憶體,而且要在main

開始執行之前對其進行初始化,且每個名字只能分配乙個值。之後該變數將一直存在直到執行結束。

3、執行時棧

執行時棧是指程式執行時使用的棧,使用棧來儲存程式執行過程中的一些系統指標。

例如,呼叫函式時儲存引數和返回位址的指標。當要呼叫函式時,程式先將這返回位址指標壓棧,然後程式跳轉至呼叫函式執行,函式返回後從棧中彈出位置指標找到呼叫函式前的位置,以便繼續執行接下來的指令。

執行時棧還用來為函式中的引數、區域性變數分配記憶體,待函式返回時從棧中釋放記憶體,允許下一次函式呼叫重用該記憶體塊。

執行時棧可以實現記憶體的重用,增加了記憶體使用效率,但使用棧儲存區域性變數有兩個主要缺點:

a、棧記憶體值的生存期取決於函式的開始和結束。即函式返回時,棧中的值就不存在了。因此,任何返回區域性變數位址的操作都是不允許的。

b、棧為區域性變數分配記憶體時,必須已知變數要占用的記憶體空間的大小。

4、自由儲存區或堆

在不能預知物件大小的情況下,就不能使用棧記憶體。例如在不知道陣列包含的元素數的情況下,就不能使用棧未陣列分配記憶體。此時,就需要動態儲存分配。堆(自由儲存區)儲存由運算子new

顯式申請空間的大小。

分類和記憶體管理

一.分類的作用 在不改變原來類內容的基礎上,可以為類增加一些方法 使用注意 1 分類只能增加方法,不能增加成員變數 2 分類方法實現中可以訪問原來類中宣告的成員變數 3 同名方法,分類的優先順序最高 方法重構,覆蓋原類中方法 4 方法呼叫優先順序 分類 原類 父類 後編譯的會覆蓋先編譯的 件不編譯 ...

C 記憶體管理 C 記憶體分類

c 記憶體管理 記憶體分類 moakap 在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c 記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。在 c 程式中,...

記憶體的分類

記憶體分類 dram dynamic random access memory 即動態 隨機訪問儲存器 最為常見的 系統記憶體 dram 只能將資料保持很短的時間。為了保持資料,dram使用電容儲存,所以必須隔一段時間重新整理 refresh 一次,如果 儲存單元 沒有被重新整理,儲存的資訊就會丟失...