iOS開發中的記憶體分配與分割槽

2022-08-13 12:27:21 字數 1150 閱讀 9021

關於ram&rom

ram與rom就是具體的儲存空間,統稱為儲存器。

ram(random access memory):執行記憶體,cpu可以直接訪問,讀寫速度非常快,但是不能掉電儲存。它又分為:

rom(read only memory):儲存性記憶體,可以掉電儲存,例如sd卡、flash(機械磁碟也可以簡單的理解為rom)。用的多的:nandflash,還有norflash,現在用的已經比較少了(兩者主要區別是前者空間大,便宜,後者可以直接執行程式,讀取速度快)。

ram與rom協同工作手機裡面使用的rom基本都是nandflash,cpu是不能直接訪問的,而是需要檔案系統/驅動程式(嵌入式中的emc)將其讀到ram裡面,cpu才可以訪問。另外,ram的速度也比nandflash快。

記憶體分割槽:可以分為5個區

說到記憶體分割槽,記憶體即指的是ram。

棧區(stack): 這個一般由編譯器操作,或者說是系統管理,會存一些區域性變數,函式跳轉跳轉時現場保護(暫存器值儲存於恢復),這些系統都會幫我們自動實現,無需我們干預。 所以大量的區域性變數,深遞迴,函式迴圈呼叫都可能耗盡棧記憶體而造成程式崩潰 。

堆區(heap): 一般由程式設計師管理,比如alloc申請記憶體,free釋放記憶體。我們建立的物件也都放在這裡。

全域性區(靜態區 static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後有系統釋放。注意:在嵌入式系統中全域性區又可分為未初始化全域性區:.bss段和初始化全域性區:data段。舉例:int a;未初始化的。int a = 10;已初始化的。

常量區:常量字串就是放在這裡的,還有const常量。

圖中各個區並不連續

程式執行舉例(cpu ram rom之間協同)

首先了解下:虛擬記憶體與物理記憶體。

在下面的舉例中,只考慮虛擬記憶體

程式設計注意

iOS 中記憶體分配與分割槽

ram與rom就是具體的儲存空間,統稱為儲存器 rom read only memory 儲存性記憶體,可以掉電儲存,例如sd卡 flash 機械磁碟也可以簡單的理解為rom 用的多的 nandflash,還有norflash,現在用的已經比較少了 兩者主要區別是前者空間大,便宜,後者可以直接執行程...

IOS中記憶體的分配

記憶體分割槽 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os ios中alloc都是存放在堆中 3 全域性區 靜態區 static 全域性變數和靜態...

iOS開發 記憶體管理之記憶體分配

下面舉個例子說明下 nsstring string string nsstring alloc initwithstring hello ios 這裡string其實就是乙個指標,oc中除了基本資料型別之外的變數型別都是指標型別,oc物件都是通過指標進行操作的。第一段 定義了nsstring型別的指...