iOS內存管理之Tagged Pointer

1 背景

iPhone5s是首個採用 64 位架構的A7雙核處理器的手機,爲了節省內存和提高執行效率,蘋果提出了Tagged Pointer的概念。對於 64 位程序,引入 Tagged Pointer 後,相關邏輯能減少一半以上的內存佔用,以及3倍的訪問速度提升,100 倍的創建、銷燬速度提升。

本文將帶我們來理解這個概念 是怎麼節省內存和提高執行效率的。(注:本篇文章所用系統 皆爲64位系統)

2 不使用Tagged Pointer的情況

以NSNumber *a = @(1);爲例,在不使用Tagged Pointer的情況下,我們看下在內存上和訪問效率上都是什麼情況。

在內存上:

如下圖所示, 1個小對象 需要至少使用24字節(指針8字節 + 對象16字節 )

棧:在棧上,佔1個指針 8字節,裏面存儲的是堆內存的地址0x600001a92920。

堆:在堆上,佔16個字節,isa指針佔8個字節,1爲int類型,佔4個字節,但由於內存對齊機制(ios 內存對齊 爲16字節),堆需要16個字節的內存。

在效率上:

NSNumber對象需要動態分配內存、維護引用計數、管理它的生命週期等

方法調用 需要objc_msgSend的執行流程(消息發送、動態方法解析、消息轉發)

原文鏈接:【https://www.infoq.cn/article/R5s0BudUKwYNDAfrIVh4】。未經作者許可,禁止轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章