標籤:android 緩衝 彙編 軟體開發 記憶體
實際上,不僅僅是android手機開發,所有的軟體開發都要注意代碼效率的問題!一般來說,實現相同的功能盡量較少地使用記憶體,最少的指令是一個優秀開發人員需要時刻注意的!這裡從兩點來討論這個問題:
(一)資料類型選擇
首先來討論基礎資料型別 (Elementary Data Type)的選擇。對於一個32位的ARM,我們來看看兩個16位的數相加的彙編代碼:
000016d0 <add_16_16>
16d0: e0810000 add r0, r1, r0
16d4: e6bf0070 sxth r0,r0
16d8: e12fff1e bx 1r
可以看出16位的資料相加需要三條指令。下面我們來看看兩個double的資料想加的彙編指令:
00001728 <add_double_double>
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位。
(二) 緩衝
然後我們要說一下緩衝。客觀的來講:指令越多,操作的資料量越大其效率就越低!為此,處理器有自己的辦法,那就是合理的使用緩衝!現在處理器緩衝技術已經很普遍,通常也有多級緩衝!緩衝的特點:效率高!成本高!所以一般情況下緩衝不可能無限制的使用!緩衝的目的就是保證處理器的效率,把常用的資料/指令或者他認為將要用到的資料和指令儲存下來以此來滿足處理器用的時候能改快速找到!
所以,為保證效率,我們需要最大限度的讓處理器能在緩衝中找到他需要的資料和指令。一般情況下,那些常常被使用到的就容易在緩衝中存在,或者相鄰的相同的資料類型,必然數組等,都有可能被提前讀到緩衝中以便處理器能改快速找到!所以,一般情況下順序訪問數組中的資料比隨機訪問資料效率高!