關於記憶體管理

2021-09-24 14:33:38 字數 1137 閱讀 6816

什麼是記憶體管理?是指軟體執行時對計算機記憶體資源的分配和使用技術。其最主要的目的就是如何高效、快速的分配,並且在適當的時候釋放和**記憶體資源。

在 ios 中資料是存在堆和棧中的,然而我們的記憶體管理管理的是堆上的記憶體,棧上的記憶體並不需要我們管理。

引用計數是計算機程式語言中的一種記憶體管理技術,是指將資源(可以是物件、記憶體或磁碟空間等等)的被引用次數儲存起來,當被引用次數變為零時就將其釋放的過程。使用引用計數技術可以實現自動資源管理的目的

mrc的四個法則

arcarc其實也是基於引用計數,只是編譯器在編譯時期自動在已有**中插入合適的記憶體管理**(包括 retain、release、copy、autorelease、autoreleasepool)以及在 runtime 做一些優化。

objective-c程式設計中為了處理物件,可將變數型別定義為id型別或各種物件型別。 arc中id型別和物件類其型別必須附加所有權修飾符。

其中有以下4種所有權修飾符:

所有權修飾符和屬性的修飾符對應關係如下所示:

__strong表示強引用,對應定義property時用到的strong。當物件沒有任何乙個強引用指向它時,它才會被釋放

__weak表示弱引用,對應定義property時用到的 weak。弱引用不會影響物件的釋放,而當物件被釋放時,所有指向它的弱引用都會自動被置為 nil,這樣可以防止野指標

__weak 的幾個使用場景:

arc 是在 ios5 引入的,而__unsafe_unretained這個修飾符主要是為了在arc剛發布時相容ios4以及版本更低的系統,因為這些版本沒有弱引用機制。這個修飾符在定義property時對應的是unsafe_unretained__unsafe_unretained修飾的指標純粹只是指向物件,沒有任何額外的操作,不會去持有物件使得物件的 retaincount +1。而在指向的物件被釋放時依然原原本本地指向原來的物件位址,不會被自動置為 nil,所以成為了野指標,非常不安全。

在arc中做記憶體管理主要就是發現這些記憶體洩漏,關於記憶體洩漏instrument為我們提供了 allocations/leaks 這樣的工具用來檢測。

關於記憶體管理

簡單的理解,可以將記憶體分為三個部分 靜態區,棧和堆,三個部分都有自己的許可權,不可以隨便讀寫。靜態區 儲存自動全域性變數和static變數,靜態區的內容在總的程式的生命週期都存在,由編譯器在編譯的時候分配。棧 儲存區域性變數。棧上的內容只在函式的範圍內存在,當函式結束,這些內容也會被自動銷毀,效率...

關於記憶體管理

記憶體管理涉及根據資料庫更改的需求為oracle database例項記憶體結構維護最佳大小。必須管理的記憶體結構是系統全域性區域 sga 和例項程式全域性區域 例項pga oracle資料庫支援各種由初始化引數設定選擇的記憶體管理方法。oracle建議您啟用稱為自動記憶體管理的方法。自動記憶體管理...

關於mysql記憶體管理 MYSQL記憶體管理及優化

mysql記憶體管理及優化 記憶體是影響資料庫效能的主要資源,也是mysql效能優化的乙個重要方面 記憶體優化的原則 將盡量多的記憶體分配給mysql做快取,但是要給作業系統和其他程式的執行預留足夠的記憶體,否則產生swap頁交換,將嚴重影響系統效能 myisam的資料檔案讀取以來作業系統自身的io...