iOS記憶體分配
摘自 ofollow,noindex">陽君的部落格
1. RAM&ROM
RAM與ROM就是具體的儲存空間,統稱為儲存器。
1.RAM(random access memory):執行記憶體,CPU可以直接訪問,讀寫速度非常快,但是不能掉電儲存。它又分為:
- 動態DRAM,速度慢一點,需要定期的重新整理(充電),我們常說的記憶體條就是指它,價格會稍低一點,手機中的執行記憶體也是指它。
- 靜態SRAM,速度快,我們常說的一級快取,二級快取就是指它,當然價格高一點。
2.ROM(read only memory):儲存性記憶體,可以掉電儲存,例如SD卡。
2. 記憶體五區
-
棧區(stack)
- 棧區地址從高到低分配;
- 存放的區域性變數(先進後出)一旦出了作用域就會被銷燬;
- 大量的區域性變數,深遞迴,函式迴圈呼叫都可能耗盡棧記憶體而造成程式崩潰 。
-
堆區(heap)
CFRelease(CFTypeRef cf)
-
全域性區/靜態區(static)
-
包括兩個部分:未初始化過和初始化過。(全域性區/靜態區)在記憶體中是放在一起的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和靜態變數在相鄰的另一塊區域;
eg:int a;未初始化的。int a = 10;已初始化的。
-
-
常量區
- 常量字串就是放在這裡,還有const常量;
-
程式碼區
- 存放App程式碼,4S(iOS7)只有74M;

image
3. RAM&ROM協調工作

image
4. App程式啟動
App程式啟動,系統會把開啟的那個App程式從Flash或ROM裡面拷貝到記憶體(RAM),然後從記憶體裡面執行程式碼。
另一個原因是CPU不能直接從記憶體卡里面讀取指令(需要Flash驅動等等)。