1. 程式人生 > >程式的記憶體分佈+ROM和RAM

程式的記憶體分佈+ROM和RAM

PS:前面部分是軟體萌新的個人理解,如果有什麼錯誤的理解部分,希望各位大牛給我指出。

SECTION 1:記憶體分佈

一個程式包含兩個部分:

1.只讀區(程式碼區),程式碼區裡有程式碼和只讀資料。(程式碼區就是程式編譯後生成的二進位制檔案,存在你的硬盤裡)

2.讀寫區(變數區),變數區有全域性變數,堆,棧。

棧:是由程序分配的臨時變數的區域。

堆:是自己開闢出來的空間,C語言裡有calloc ,malloc函式來開闢空間,由free釋放。java由new開闢,有自動回收機制。

再細講:

http://blog.csdn.net/hackbuteer1/article/details/6786811

在現代的作業系統中,當我們說到記憶體,往往需要分兩部分來講:實體記憶體和虛擬記憶體

。從硬體上講,虛擬空間是CPU內部的定址空間,位於MMU之前,物理空間是總線上的定址空間,是經過MMU轉換之後的空間。

一般我們所說的程式在記憶體中的分佈指的就是程式在虛擬記憶體中的儲存方式。

從低地址到高地址,可分為下面幾段: 
預留記憶體地址
(作業系統維護的記憶體地址,不可訪問) 
程式程式碼區(只讀,存程式碼和一些其他的東西); 
data段(存初始化的全域性變數和static變數,另外還有文字常量區,常量字串就是放在這裡,程式結束後有系統釋放); 
bss段(存未初始化的全域性變數和static變數); 
(由低地址向高地址增長,一般new和malloc分配,由程式設計師分配釋放);
共享庫檔案
(呼叫的庫檔案,位於堆和棧之間); 
(由高地址向低地址增長,和堆的增長方式相對,對不同的OS來說,棧的初始大小有規定,可以修改,目前預設一般為2M,由編譯器自動分配釋放); 
再上面存的都是作業系統和核心呼叫的一些記憶體地址

SECTION 2:ROM和RAM

ROMRAM指的都是半導體儲存器,ROMRead Only Memory的縮寫,RAMRandom Access Memory的縮寫。ROM在系統停止供電的時候仍然可以保持資料,而RAM通常都是在掉電之後就丟失資料.

RAM有兩大類,一種稱為靜態RAMStatic RAM/SRAM),SRAM速度非常快,是目前讀寫最快的儲存裝置了,但是它也非常昂貴,所以只在要求很苛刻的地方使

用,譬如CPU的一級緩衝,二級緩衝。另一種稱為動態RAMDynamic RAM/DRAM),DRAM保留資料的時間很短,速度也比SRAM慢,不過它還是比任何的ROM都要快,但從價格上來說DRAM相比SRAM要便宜很多,計算機記憶體就是DRAM的.

   DRAM分為很多種,常見的主要有FPRAM/FastPageEDORAMSDRAMDDR RAMRDRAMSGRAM以及WRAM

記憶體工作原理:記憶體是用來存放當前正在使用的(即執行中)的資料和程式,我們平常所提到的計算機的記憶體指的是動態記憶體(即DRAM),動態記憶體中所謂的"動態",指的是當我們將資料寫入DRAM後,經過一段時間,資料會丟失,因此需要一個額外設電路進行記憶體重新整理操作。

具體的工作過程是這樣的:一個DRAM的儲存單元儲存的是0還是1取決於電容是否有電荷,有電荷代表1,無電荷代表0。但時間一長,代表1的電容會放電,代表0的電容會吸收電荷,這就是資料丟失的原因;重新整理操作定期對電容進行檢查,若電量大於滿電量的12,則認為其代表1,並把電容充滿電;若電量小於12,則認為其代表0,並把電容放電,藉此來保持資料的連續性。

ROM也有很多種,PROM是可程式設計的ROMPROMEPROM(可擦除可程式設計ROM)兩者區別是,PROM是一次性的,也就是軟體灌入後,就無法修改了,這種是早期的產品,現在已經不可能使用了,而EPROM是通過紫外光的照射擦出原先的程式,是一種通用的儲存器。另外一種EEPROM是通過電子擦出,價格很高,寫入時間很長,寫入很慢。

FLASH儲存器又稱快閃記憶體,它結合了ROMRAM的長處,不僅具備電子可擦除可程式設計(EEPROM)的效能,還不會斷電丟失資料同時可以快速讀取資料(NVRAM的優勢),U盤和MP3裡用的就是這種儲存器。在過去的20年裡,嵌入式系統一直使用ROMEPROM)作為它們的儲存裝置,然而近年來Flash全面代替了ROMEPROM)在嵌入式系統中的地位,用作儲存Bootloader以及作業系統或者程式程式碼或者直接當硬碟使用(U盤)。目前Flash主要有兩種NOR FlashNADN Flash。(個人認為flash和ROM的性質差不多)

NOR FLASH和NAND FLASH的一些比較。

● NOR的讀速度比NAND稍快一些。

● NAND的寫入速度比NOR快很多。

● NAND4ms擦除速度遠比NOR5s快。

大多數寫入操作需要先進行擦除操作。

● NAND的擦除單元更小,相應的擦除電路更少。

(注:NOR FLASH SECTOR擦除時間視品牌、大小不同而不同,比如,4M FLASH,有的SECTOR擦除時間為60ms,而有的需要最大6s)