UWA記憶體管理篇 常識(三)

2021-09-20 06:45:41 字數 1268 閱讀 6913

記憶體管理-記憶體占用:

一般來說記憶體占用大小有如下規律:vss >= rss >= pss >= uss 

vss - virtual set size 虛擬耗用記憶體(包含共享庫占用的記憶體)是單個程序全部可訪問的位址空間 

rss - resident set size 實際使用物理記憶體(包含共享庫占用的記憶體)是單個程序實際占用的記憶體大小,對於單個共享庫, 儘管無論多少個程序使用,實際該共享庫只會被裝入記憶體一次。 

pss - proportional set size 實際使用的物理記憶體(比例分配共享庫占用的記憶體) 

uss - unique set size 程序獨自占用的物理記憶體(不包含共享庫占用的記憶體)uss 是乙個非常非常有用的數字, 因為它揭示了執行乙個特定程序的真實的記憶體增量大小。如果程序被終止, uss 就是實際被返還給系統的記憶體大小。 

uss 是針對某個程序開始有可疑記憶體洩露的情況,進行檢測的最佳數字。懷疑某個程式有記憶體洩露可以檢視這個值是否一直有增加

總記憶體為unity引擎所統計的真實物理記憶體分配,並不包含系統快取和第三方庫的自身分配記憶體; 堆記憶體所指的是 mono 管理和分配的託管堆記憶體; gfx記憶體為用於渲染的資源所占用的記憶體,主要包括紋理資源、網格資源、shader資源等; 

洩露風險其判斷依據主要為檢測總記憶體的分配、各資源的記憶體占用是否存在逐步增高的趨勢。

託管堆記憶體

表示專案執行時**分配的託管堆記憶體分配量。對於使用mono進行**編譯的專案,其託管堆記憶體主要由mono分配和管理;對於使用il2cpp進行**編譯的專案,其託管堆記憶體主要由unity自身分配和管理。目前,除ios平台外,其他平台的絕大多數專案還在使用mono來進行**編譯。

對於mono堆記憶體來說,由於mono自身的限制,其堆記憶體分配是 「只公升不降」 的,即記憶體一旦分配給mono,不論以後該記憶體是否繼續被使用,都不會再歸還給系統。因此,建議您對於**的堆記憶體分配進行嚴格的控制,避免不必要的mono堆記憶體分配。

reserved totalused total為unity引擎在記憶體方面的總體分配量和總體使用量

android平台:在客戶端最低配置以上,均需滿足以下記憶體消耗指標(pss):

1)記憶體1g以下機型:最高pss<=150mb

2)記憶體2g的機型:最高pss<=200mb

ios平台:在iphone4s下執行,消耗記憶體(real mem)不大於150mb

記憶體管理三之函式篇

1.vmalloc kmalloc 是用來分配核心空間記憶體的,malloc 是用來分配使用者空間的記憶體的。kmalloc分配的頁在實體地址上是連續的 虛擬位址自然也是連續的 vmalloc 只確保 頁在虛擬位址空間內是連續的。它通過非連續的物理記憶體塊,再 修正 頁表,把記憶體對映到邏輯位址空間...

基礎篇 記憶體管理

記憶體問題主要是兩方面 記憶體溢位,野指標異常.記憶體溢位 ios給每個應用程式一定的記憶體用於程式執行,一旦超出記憶體上線,程式就會crash 野指標 記憶體空間已經被系統收回仍舊在只用這塊記憶體,程式就會crash 記憶體管理方式 mrc,arc mrc的記憶體管理機制是引用計數 arc是基於m...

C 基礎 記憶體管理篇

記憶體管理是計算機程式設計最為基本的領域之一。在很多指令碼語言中,您不必擔心記憶體是如何管理的,這並不能使得記憶體管理的重要性有一點點降低。對實際程式設計來說,理解您的記憶體管理器的能力與 侷限性至關重要。在大部分系統語言中,比如 c 和 c 您必須進行記憶體管理。本文將介紹手工的 半手工的以及自動...