04 記憶體管理

2021-07-07 03:06:38 字數 1386 閱讀 9821

cocos 採用的是引用計數管理,自動釋放

1. new 乙個ref物件,pobj 的引用計數為1

2.呼叫了autorelease 將該物件(pobje)的位址新增到poolmanager::getinstance()->getcurrentpool 中

3.在pool 中使用vector來儲存

4.當director在下一幀處理渲染的時候,先drawscene,然後clear全部的pool中的ref物件

內部的ref物件的引用計數都會自動-1

我們以乙個sprite為例來說明

sprite *psprite = sprite::create(「png file」);

create方法完成兩件事情

1.new sprite

2.將psprite物件放在pool裡面

此時psprite的引用計數為1

3.通常我們會將psprite物件放在乙個父node容器中,加入放在了乙個layer中

最終在node中新增在了_children中,此時psprite的引用計數為2

因為在vector中的pushback中 呼叫了 ref物件的retain方法

4.此時在下一幀的時候,當然先呼叫了drawscene

將該sprite渲染出來,然後呼叫了pool的clear方法,針對乙個單獨的ref來說,也就是呼叫了release方法,此時psprite的引用計數變為1

5.psprite物件已經不存在於pool中了,所以幀迴圈中就不涉及psprite物件的引用計數改變了

6.當psprite的父物件node自我銷毀的時候,執行完畢psprite父物件的release過程後,psprite父物件中的 vector_children; 會自動呼叫clear方法

也就是找到每乙個子物件,然後呼叫其release方法,所以該方法執行到 psprite->release的時候

psprite物件的引用計數變為0 ,所以自己將被delete

對於一幀中區域性需要new ref的物件,並且又希望區域性使用完畢被釋放掉的時候,可以在區域性方法中如下方式:

autoreleasepool ptmppool;

for ...

ref* pnewobj = ...

pnewobj->...

記憶體管理 記憶體管理概述

儲存器的發展方向是高速 大容量和小體積,即儲存器嘗試更高讀寫速度,更大儲存容量,更小物理體積。在計算機中,常見的儲存器有 暫存器,快取,記憶體,硬碟,一般硬碟之類的輔助儲存器又稱外存。在平均讀寫速度上,有 暫存器 快取 記憶體 外存 在單位容量 上,有 外存 記憶體 快取 暫存器 cpu處理器只能直...

《記憶體管理》 記憶體

1.c c 記憶體分布 我們先來看下面的一段 和相關問題 int globalvar 1 static int staticglobalvar 1 void test char char2 abcd char pchar3 abcd int ptr1 int malloc sizeof int 4 ...

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

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