關於引用計數和GC的一點研究

2021-05-08 02:08:22 字數 1223 閱讀 6634

由於服務端c++程式設計的記憶體管理的複雜性

和程式書寫的複雜性,一般推薦使用引用計數和gc,

從效率上看引用計數的效率非常高,gc的效率比較低。

這裡討論一下主流的引用計數和gc

詳細**見

雲計算引擎

一.引用計數

1.引用計數的兩個基本原則

1.1 保證引用計數的加和減成對使用。

1.2 引用計數從0開始當引用計數到0時**記憶體

2.引用計數的執行緒安全

2.1 在增加和減少引用計數操作必須執行緒安全的。

2.1 對於引用計數的複製,必須保證複製時是執行緒安全的。

3.引用計數的優點和缺點

3.1 優點

3.1.1 執行速度快,編寫**簡單。

3.1.2 **不複雜,可以有效的程式設計。

3.2 缺點

3.2.1 引用計數不能有效的解決 a->b  b->a 迴圈引用的問題,

不能打破迴圈引用,從而會導致記憶體洩露,這時候就要gc登場。

二.普通gc方法

1.gc的基本原則

一句話原則,如果物件沒有被外部直接或間接的引用,則這個物件要進行**。

2.一般方法

2.1 gc要基於引用計數

2.2 當計數由0變1時,要將物件加入gc器

2.3 當計數有1變0時,要將物件從gc器中刪除

2.4 gc方法

2.4.1 找到gc器中所有被指向的次數和當前引用不相等的物件

2.4.2 統計物件所指向的所有的物件

2.4.3 遍歷所指向的物件

2.4.4 直到這個物件指向已經被統計或這個物件沒有指向為止則停止

2.4.5 其他情況下重複1.4.2

2.4.6 這些被統計的物件都不能被**

2.4.6 其它沒有被指向的物件都要進行**

3.引用計數的執行緒安全

3.1 在改變引用用計數和gc過程要進行進行同步

3.2 2.4.1和修改引用計數指向要進行同步

3.3(2.4.2,2.4.3,2.4.4)和修改引用計數指向要進行同步。

4.引用計數的優點和缺點

4.1 優點

4.1.1 不用擔心記憶體洩露

4.2 缺點

4.2.1 速度比較慢

關於block和引用計數

1 修飾block 如果需要block在它被宣告的作用域被銷毀後繼續使用的話,你就需要做乙份拷貝。拷貝會把block移到堆裡面。所以,使用 property時設定通常如下 property copy,nonatomic void block void 2 retain cycle的問題 block在...

關於sidebar的一點研究

關於sidebar的一點研究 摘要 vista中的sidebar也算是windows中的乙個新東西,抽時間小研了一下,在這裡做個小結。研究的也不深,如有不正確的地方還請大家拍磚。全文 一 gadget的實現說明 gadget是一種由sidebar這個程式顯示在邊欄或桌面上的html頁面,可以用指令碼...

關於Azure Storage 的一點研究

關於azure storage 的介紹和用c 去使用blob storage,可以參考下面這個官方資料 運維給了乙個uri https blob.core.chinacloudapi.cn 乙個account name和乙個account key.在嘗試往uri上傳檔案時,發現報錯,提示找不到對應位...