散列表的內(nèi)存管理方案,在源碼中是通過SideTables()
結(jié)構來實現(xiàn)的异剥, SideTables()
中有很多SideTable
數(shù)據(jù)結(jié)構易遣, SideTables()
實際是一個哈希表,即可以通過一個對象指針來找到對象的引用計數(shù)表或弱引用表在哪一個具體的SideTable
中。
SideTable
數(shù)據(jù)結(jié)構中鼻吮,包括自旋鎖车吹、引用計數(shù)表RefcountMap和弱引用表weak_table_t等數(shù)據(jù)結(jié)構筹裕。
內(nèi)存管理方案的數(shù)據(jù)結(jié)構
問題:蘋果為什么設計出多個
SideTable
組成一個SideTables()
,而不是直接設計一個SideTable
如果要設計一個
SideTable
而不是多個窄驹,如果在多線程中進行表的訪問操作朝卒,為了訪問安全需要進行加鎖處理,此時就會存在效率問題乐埠,因此設計多個SideTable
抗斤,操作時對每個表分別進行加鎖,然后訪問操作丈咐,可以同時進行瑞眼,提高了訪問效率
問題:系統(tǒng)是如何定位到對應的引用計數(shù)表或弱引用表的
SideTables()
實際是一個哈希表,系統(tǒng)通過一個哈希算法(哈希查找)來定位的棵逊,具體就是通過對象的內(nèi)存地址與SideTables
數(shù)組的個數(shù)進行取余運算(此函數(shù)是均勻散列函數(shù))伤疙,獲取到SideTable
在SideTables
中的索引位置