ObjectC oc中的記憶體分配

2021-07-03 06:47:52 字數 599 閱讀 8018

一、記憶體分配順序

程式一啟動的時候就會先載入**區中的**,然後載入常量區中的常量,接著載入全域性區和靜態區(初始化過的靜態區和沒有初始化過的靜態區是分開的),以上四個區都是隨著程式啟動而載入到記憶體中,隨著程式的退出而銷毀。程式設計師不需要管理這一塊的記憶體。

堆區:堆區用來存放物件,需要使用alloc來分配記憶體空間。程式設計師需要管理堆區的記憶體。arc的記憶體管理,是xcode編譯器在編譯的時候,自動在合適的地方新增retain、release、autorelease,由編譯器代替程式設計師進行記憶體管理。堆區的變數位址是由下往上分配的,所以先宣告的變數位址要比後宣告的變數位址小。

棧區:棧區用來存放區域性變數,先進後出,一旦出了作用域就會被銷毀。程式設計師不需要管理棧區變數的記憶體。棧區變數的大小是由上到下分配的,所以先宣告的變數位址比後宣告的變數位址要大。棧區儲存在應用程式允許的記憶體空間的最上面。

一般而言,棧區的記憶體位址要比堆區的記憶體空間要大。

如果是在多執行緒的情況下,這種情況可能會有變化。多執行緒中分配的棧區變數位址可能會比堆區的小。

二、慎用全域性和靜態變數

全域性變數和靜態變數要盡量少用。因為這些變數在程式的生命週期中不會變釋放,比較容易占用記憶體空間,不適合儲存比較大量的資料。

object c oc 記憶體管理機制詳解

記憶體的建立和釋放 讓我們以object c世界中最最簡單的申請記憶體方式展開,談談關於乙個物件的生命週期。首先建立乙個物件 1 2 3 classname 是任何你想寫的類名,比如nsstring nsarray等一切隨意 idtestobject classname alloc init 注 a...

IOS中記憶體的分配

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

C 中的記憶體分配

在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區堆 堆就是那些由 new 分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個 new 就 要對應乙個 delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動 堆可以動態地擴...