編輯:關於Android編程
實際上,不僅僅是android手機開發,所有的軟件開發都要注意代碼效率的問題!一般來說,實現相同的功能盡量較少地使用內存,最少的指令是一個優秀開發者需要時刻注意的!這裡從兩點來討論這個問題:
(一)數據類型選擇
首先來討論基本數據類型的選擇。對於一個32位的ARM,我們來看看兩個16位的數相加的匯編代碼:
000016d0
16d0: e0810000 add r0, r1, r0
16d4: e6bf0070 sxth r0,r0
16d8: e12fff1e bx 1r
可以看出16位的數據相加需要三條指令。下面我們來看看兩個double的數據想加的匯編指令:
00001728
1728: ec410b16 vmov d6, r0, r1
172c: ec432b17 vmov d7,r2,r3
1730: ee366b07 faddd d6, d6,d7
1734: ec510b16 vmov r0, r1, d6
1738: e12fff1e bx 1r
可以得出結論,實際上,不同數據類型的使用其效率時完全不一樣!
實際上,貿然說使用較小的數據類型效率高是不准確的!對於32的處理器,其32數據類型的效率時最高的!不過總的來說,在數據類型選擇上遵循兩個原則:
(1)盡量選擇數據類型小的
(2)盡量選擇相同類型的數據類型來操作:算數/比較等。也就是盡量防止不必要的強制轉換。
一般來說,16位的數據排序的效率要遠遠快於32位64位。
(二) 緩存
然後我們要說一下緩存。客觀的來講:指令越多,操作的數據量越大其效率就越低!為此,處理器有自己的辦法,那就是合理的使用緩存!現在處理器緩存技術已經很普遍,通常也有多級緩存!緩存的特點:效率高!成本高!所以一般情況下緩存不可能無限制的使用!緩存的目的就是保證處理器的效率,把常用的數據/指令或者他認為將要用到的數據和指令保存下來以此來滿足處理器用的時候能改快速找到!
所以,為保證效率,我們需要最大限度的讓處理器能在緩存中找到他需要的數據和指令。一般情況下,那些常常被使用到的就容易在緩存中存在,或者相鄰的相同的數據類型,必然數組等,都有可能被提前讀到緩存中以便處理器能改快速找到!所以,一般情況下順序訪問數組中的數據比隨機訪問數據效率高!
一、概述最近項目准備嘗試使用webp來縮小包的體積,於是抽空對相關知識進行了調研和學習。至於什麼是webp,使用webp有什麼好處我就不贅述了,具體可以參考騰訊isux上
本篇博客內容轉自 github: https://github.com/shwenzhang/AndResGuard/blob/master/README.zh-cn.m
Android 利用ContentProvider獲取聯系人信息。在寫代碼前我們首先看一下運行的效果運行效果如下:點了獲取聯系人就展示如下效果讀取聯系人信息的
一、基於Rild的通信架構一般智能手機的硬件架構都是兩個處理器:一個處理器用來運行操作系統,上面運行應用程序,這個處理器稱作Application Processor,簡