前在做Symbian的时候,曾经研究过ARM
CPU的指令集问题,ARM处理器支持两套指令集,即ARM和Thumb。ARM为32位指令集而Thumb为16位指令集,理论上32位可以提供更快的
执行速度但会生成更大的二进制执行文件,而16位的Thumb则恰恰相反,省地儿但慢,这也正是体现出了ARM对于嵌入式设备的专业性。对于我这种牺牲一
切换速度的理念来说,当时就留下了ARM就比Thumb快的印象,以致于现在在做Android
NDK原生开发时,也是优先用ARM指令集。(这个可以通过在Android.mk中加入LOCAL_ARM_MODE :=
但是最近在Xcode编译iOS项目时,注意到同为ARM处理器的苹果设备,使用的是Thumb指令集,而且好像还是某种新版本的Thumb指令集,小搜索了一下看到有人说这种
armv7对于苹果设备来说,意味着iPhone
3GS以上级别的设备的CPU,而目前主流的Android设备几乎全是armv7处理器的了。也许对于早起的armv6处理器来说,ARM指令集还有优
势,但是对于新的v7处理器,各种资料都表明Thumb-2要更好一些。
总的来说,ARM指令集会在某些方面有优势,比如手写汇编(额…),而Thumb则能生成更精简的代码,而且还有一点我之前没有太意识到的问题就是:省电!所以仔细斟酌后,我还是决定把NDK编译选项由原来的ARM改回默认的Thumb,遵循默认原则吧还是。
而对于v7和非v7的问题,Android上可以这样处理,以略增大apk为代价,加入单独针对v7