久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

對(duì)于Android NDK編譯器ARM和Thumb模式的理解及Toolchain的切換clang編譯器

 勤奮不止 2014-08-25

以前在做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中加入”APP_ABI := armeabi armeabi-v7a"

另外,,隨著項(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)了異常,,刪除注釋后就沒事了…

參考文章:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多