IOS中Tagged Pointer詳解

來源:互聯網
上載者:User

前言

在2013年9月,蘋果推出了iPhone5s,與此同時,iPhone5s配備了首個採用64位架構的A7雙核處理器,為了節省記憶體和提高執行效率,蘋果提出了Tagged Pointer的概念。對於64位程式,引入Tagged Pointer後,相關邏輯能減少一半的記憶體佔用,以及3倍的訪問速度提升,100倍的建立、銷毀速度提升。本文從Tagged Pointer試圖解決的問題入手,帶領讀者理解Tagged Pointer的實現細節和優勢,最後指出了使用時的注意事項。

問題

我們先看看原有的對象為什麼會浪費記憶體。假設我們要儲存一個NSNumber對象,其值是一個整數。正常情況下,如果這個整數只是一個NSInteger的普通變數,那麼它所佔用的記憶體是與CPU的位元有關,在32位CPU下佔4個位元組,在64位CPU下是佔8個位元組的。而指標類型的大小通常也是與CPU位元相關,一個指標所佔用的記憶體在32位CPU下為4個位元組,在64位CPU下也是8個位元組。

所以一個普通的iOS程式,如果沒有Tagged Pointer對象,從32位機器遷移到64位機器中後,雖然邏輯沒有任何變化,但這種NSNumber、NSDate一類的對象所佔用的記憶體會翻倍。如下圖所示:

我們再來看看效率上的問題,為了儲存和訪問一個NSNumber對象,我們需要在堆上為其分配記憶體,另外還要維護它的引用計數,管理它的生命期。這些都給程式增加了額外的邏輯,造成運行效率上的損失。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.