天天看點

記憶體管理

記憶體管理

記憶體提供了一種存儲資訊的方式。

根據怎樣使處理器能快速通路存儲的資料,計算機儲存設備可分為如下幾類:

1)處理器寄存器

2)處理器緩存

3)RAM

4)本地磁盤存儲

5)經網絡連接配接的資料存儲

有三種級别的記憶體管理:

1)機器級

記憶體由一系列的讀寫單元所組成。每個記憶體單元都是一個基于半導體的電子元件,它存在兩種可能狀态。以0和1分别表示這兩種可能狀态。

記憶體單元按位元組進行分組。

處理器使用總線來操縱記憶體。總線是連接配接處理器和計算機子系統的一系列連接配接線。

有三類總線:控制總線、位址總線、資料總線。

MAS Memory Address Space 記憶體位址空間

記憶體不僅用于存儲程式指令,它還用于存儲資料。

有兩種方法在記憶體中存儲多位元組資料:Big-endian和Little-endian。

例如0xABCDEF12資料:

——————————————————————

方法                        24     25     26     27

Big-endian             AB     CD     EF     12

Little-endian          12     EF     CD     AB

其存儲方法取決于你所采用的硬體平台。

如采用Intel的處理器,它是以Little-endian存儲的,可程式設計證明:

#include

int main(int argc, char *argv[]){

 unsigned long value = 0xABCDEF12;

 unsigned char *arr;

 arr = (unsigned char *)&value;

 printf("%X %X %X %X/n",arr[0],arr[1],arr[2],arr[3]);

 return;

}

——————————————

輸出結果:12 EF CD AB

注意:位元組順序是從一個平台到另一個平台移植代碼的主要問題。

使用Big-endian的資料表示方法被稱為網絡順序(Network Order)。這是因為網絡協定如TCP/IP需要以Big-endian格式發送一定的資訊塊。

2)作業系統級

從作業系統級來看,記憶體有一系列連續的位元組所組成。每個位元組都有唯一的以0開始的整數位址,0位址表示記憶體的底部。

為防止應用程式的失效和記憶體短缺,作業系統有兩種記憶體管理手段:segmentation(分段)和paging(分頁)。

磁盤空間也經常用于模拟記憶體空間,即虛拟記憶體。

目前32位Intel處理器的記憶體分頁有三種尺寸:4096bytes、2MB、4MB。通過系統的控制寄存器CR4的第4、5位(标志PSE和PAE)進行設定。

分段是一種設定保護的方法。分段的目的是在記憶體中隔離程式,使其互相不發生幹擾。早期的作業系統如DOS沒有提供任何保護。惡意程式很容易控制計算機運作的DOS并重新格式化硬碟。

以分段方式分割記憶體的區域,這些區域稱為segment。一個程式至少由一個及以上的segment組成。

3)應用程式級

作業系統為應用程式配置設定記憶體,它把記憶體分為一個或多個segment。應用程式使用了如下幾種segments:

  (1) Text segment

  (2) Data segment

  (3) Stack segment

  (4) Heap

程式有兩個基本元素:指令和資料。

Text segment通常用于存儲程式指令。

Data segment用于存儲編譯時的全局資料。Data segment的存儲空間是靜态的。

Stack segment用于運作時作為臨時存取點。處理器使用stack來為函數參數、本地變量、函數傳回值等配置設定臨時存儲空間。當函數調用時,函數參數、本地變量、函數傳回值存儲到Stack segment,當函數傳回時,所有的記憶體都被釋放。

Heap取決于運作時的系統調用。Heap用于運作時動态配置設定記憶體。

下表簡要的比較了幾種語言的記憶體管理設施。

——————————————————————————————————————————

語言 Data segment Stack segment Heap

COBOL-85 yes no no

ANSI C yes yes 手動回收

Java no yes 垃圾收集器

C語言,使用stack配置設定臨時存儲,包括局部變量、函數參數和函數傳回值。這些變量在函數調用時存在。

Heap是一個記憶體區域,主要用于擷取資料。與Stack不同,Heap沒有push/pop操作。這使得Heap管理更為靈活,但也更為複雜。