以前在做Symbian的時(shí)候,,曾經(jīng)研究過ARM CPU的指令集問題,ARM處理器支持兩套指令集,,即ARM和Thumb,。ARM為32位指令集而Thumb為16位指令集,,理論上32位可以提供更快的執(zhí)行速度但會(huì)生成更大的二進(jìn)制執(zhí)行文件,而16位的Thumb則恰恰相反,,省地但慢,,這也正是體現(xiàn)出了ARM對(duì)于嵌入式設(shè)備的專業(yè)性。對(duì)于我這種犧牲一切換速度的理念來說,,當(dāng)時(shí)就留下了ARM就比Thumb快的印象,,以致于現(xiàn)在在做Android NDK原生開發(fā)時(shí),也是優(yōu)先用ARM指令集,。(這個(gè)可以通過在Android.mk中加入LOCAL_ARM_MODE := arm控制,,默認(rèn)情況下NDK使用Thumb指令集) 但是最近在Xcode編譯iOS項(xiàng)目時(shí),注意到同為ARM處理器的蘋果設(shè)備,,使用的是Thumb指令集,,而且好像還是某種新版本的Thumb指令集,小搜索了一下看到有人說這種armv7引入的叫做Thumb-2的指令集要比arm指令集更好,!于是又重新搜索更新了一下大腦知識(shí)庫… armv7對(duì)于蘋果設(shè)備來說,,意味著iPhone 3GS以上級(jí)別的設(shè)備的CPU,而目前主流的Android設(shè)備幾乎全是armv7處理器的了,。也許對(duì)于早起的armv6處理器來說,,ARM指令集還有優(yōu)勢(shì),但是對(duì)于新的v7處理器,,各種資料都表明Thumb-2要更好一些,。 總的來說,ARM指令集會(huì)在某些方面有優(yōu)勢(shì),,比如手寫匯編(額…),,而Thumb則能生成更精簡(jiǎn)的代碼,而且還有一點(diǎn)我之前沒有太意識(shí)到的問題就是:省電,!所以仔細(xì)斟酌后,,我還是決定把NDK編譯選項(xiàng)由原來的ARM改回默認(rèn)的Thumb,遵循默認(rèn)原則吧還是,。 而對(duì)于v7和非v7的問題,,Android上可以這樣處理,以略增大apk為代價(jià),,加入單獨(dú)針對(duì)v7和非v7版的so文件,,這樣apk在安裝時(shí)會(huì)自動(dòng)根據(jù)目標(biāo)設(shè)備的CPU安裝合適的so庫,從而達(dá)到更好的效果,,具體做法是在Application.mk中加入” 另外,,隨著項(xiàng)目規(guī)模的增大,代碼編譯生成時(shí)間會(huì)大大增加,這時(shí)候可以考慮更換r8c版NDK新加入的Clang編譯器(蘋果家的編譯器,,新版Xcode默認(rèn)就用它),,實(shí)測(cè)發(fā)現(xiàn)Clang比GCC明顯快很多,而且對(duì)于warning, error的顯示也比GCC要人性的多(有人說GCC的提示就像是天書,,呵呵),,不過據(jù)說Clang也有一些不足,比如對(duì)于標(biāo)準(zhǔn)的支持不如GCC(這話怎么聽著像是說MS的…),,不如GCC支持的語言廣等,,但感覺對(duì)于Android原生開發(fā)來說都是些無關(guān)緊要的事,我只要編譯快,,運(yùn)行快就好了,! 改用Clang編譯器的方法如下: 對(duì)于ndk-build方式,可以使用“export NDK_TOOLCHAIN_VERSION=clang3.1”導(dǎo)出環(huán)境變量,,或者將這個(gè)環(huán)境變量設(shè)置加入到Application.mk中,。 對(duì)于獨(dú)立編譯方式,在make-standalone-toolchain.sh腳本中加入–llvm-version=3.1 并在makefile中用<tool-path>/bin/clang and <tool-path>/bin/clang++替換 CC 和CXX 參數(shù),。 PS:實(shí)際編譯時(shí)發(fā)現(xiàn)Clang好像對(duì)中文注釋支持不是特別好,,比如有端代碼在if(…)后謝了//中文注釋,導(dǎo)致編譯器處理至此處時(shí)直接報(bào)了異常,,刪除注釋后就沒事了… 參考文章:
|
|