關于iPhone的CPU處理器有32位和64位刁赖,從iPhone5s開始蘋果就開始使用64位的處理器了,關于32位和64位有什么區(qū)別呢助隧?
首先我們要知道32位和64位代表什么,它指的是CPU的數據吞吐量虐块,比如32位的CPU是有32根數據線,64位的則有64根數據線嘉蕾,而一根數據線可以讀取一位信號(0或1)贺奠,32位的CPU一次能處理4個字節(jié)的數據,64位的則可以處理8個字節(jié)的數據错忱,從數據處理上速度上明顯64位的要更快儡率。
在我學習Runtime原理時,看到源代碼有一處非常有意思的算法以清。
假如有這樣一個需求儿普,當我傳入一個整數時,返回的結果必須是8的倍數掷倔,比如我傳入12眉孩,返回的是16;傳入的18勒葱,則返回的是24.浪汪。。凛虽。死遭。
普通程序員小華的想法是:
設傳入的參數為x,則(x+7)/8 * 8
即為8的整數倍凯旋。轉換為代碼即為
int wordAlign(int x){
return (x+7) / 8 * 8;
}
基礎較好的程序員小明的想法是:
設傳入的參數為x呀潭,則通過右移3位再左移3位即可得到8的整數倍,而且這樣寫速率也會更快
int wordAlign(int x){
return (x+7) >> 3 << 3;
}
在此解釋一下小明的操作:
假如我們傳入wordAlign的參數為12瓦阐,則12+7=19蜗侈,用二進制表示就是0001 0011,右移3位的話變成0000 0010睡蟋,然后再左移3位踏幻,則為0001 0000,即十進制的16
蘋果工程師的寫法:
Snip20190313_1.png
之所以說蘋果工程師牛逼戳杀,是因為他的封裝思想该面,他使用一個方法就可以同時滿足32位和64位的CPU,假如是64位機器信卡,則 (x+7) & ~7
隔缀,這里我們傳入的還是12,計算過程和結果如下圖:
Snip20190313_2.png
結果仍是16傍菇,程序員小明的寫法雖然和蘋果工程師的寫法在CPU運行速度是一樣的猾瘸,但顯然蘋果工程師的寫法更加靈活,這一點是值得我們學習的地方,這也是我覺得蘋果工程師的牛逼之處牵触。淮悼。