ARM处理器指令集一. 苹果模拟器指令集:指令集分析i386intel通用微处理器32架构用x86_64x86架构用64位处理器i386|x86_64 x86_64是用于x86体系结构的64位处理器。 模拟器不执行arm代码,软件编译成x86可以执行的指令。 因此,生成静态库时,它会变成两个. a,一个用于在模拟器上运行,另一个用于在实际设备上运行,然后在命令中将两个. a合并为一个。
二.苹果设备指令集相关位数量指令集32位ARMARMv6、armv7、armv7s64位ARMarm64、armv8applea7处理器包括32位arm指令集(armv6
第一代、第二代iPod Touch
armv7设备iPhone3GS、iPhone4、iPhone4S;
iPad、iPad2、ipad3(thenewipad )、iPad mini;
iPod Touch 3G,iPod Touch4
armv7s设备iPhone5、iPhone5C、
ipad4(ipadwithRetinadisplay )。
http://www.Sina.com/http://www.Sina.com /设备iPhone5S、iphone6s(plus )、iPhoneSE、iphone6s(plus ) )。
iPad Air,ipad mini2(ipadminiwithretinadisplay )。
3358www.Sina.com/,ARMv8指令集arm64模拟器装置三. 苹果模拟器
(i386,x86_64 )。
设备
(armv6、armv7、armv7s、armv8、armv64 )
使用iOS模拟器时会遇到i386|x86_64。 iOS模拟器没有arm指令集,编译和执行的是x86指令集。 因此,仅在iOS设备上执行与该设备对应的arm指令集。
四.生成XCode指令集XCode二进制软件包指令集的设置为:
图. xcode设置
Xcode配置项定义注意事项Architecture是指您希望支持的指令集。 此选项指定是否编译为工程支持的指令集。
如果支持多个指令集,则会编译包含多个指令集代码的包,最终编译生成的包会变大。
Valid Architectures即将编译的指令集此选项指定可支持的指令集。 此Valid architectures列表与architectures列表的交叉点是Xcode最终生成的二进制包支持的指令集
限制可能支持的指令集的范围
33558 www.Sina.com/: valid architectures设置的支持arm的指令集为“armv7/armv7s/arm64”,对应的architectures设置的支持arm的指令集为“armv7s”
Build Active Architecture Only此编译项用于设置是否仅编译与当前使用的设备相对应的arm指令集。 使用总结:
其值设定为是;
XCode已成功连接到调试设备(必须同时满足才能正常工作)对于Xcode,请参阅x86
如果设置为Yes,则编译速度加快,仅编译当前的architecture版本
如果设置为no,则编译速度变慢,编译所有版本
arm:如果此选项设置为“是”,则即使是上一个armv7指令集设备(iPhone5、5c ),Valid Architectures和armv7
三:我们将Build Active Architecture Only的值设置为YES,同时Xcode连接到手机iPhone5S以匹配指令集arm64 )。 以下五种情况总结如下。
状况architecturesvalidarchitectures结果分析状况armv7、
armv7s、
arm64armv6、
armv7s、
arm64arm64在:处取交叉ar
m64和 armv7s,但iPhone5S匹配指令集arm64,所以:为arm64
情况②armv6、armv7、
armv7sarmv6、
armv7s、
arm64armv7s
因为:取交集armv6和armv7s,但iPhone5S匹配指令集arm64,但同时支持armv7s,同时XCode4.5开始,就不再支持armv6指令集
所以:为arm64
情况③armv6armv7armv6、
armv7s、
arm64armv7无交集。但是因为:ValidArchitectures支持armv7s则必然支持armv7,Architectures支持armv7,从XCode4.5开始,就不再支持armv6指令集。所以:最终生成二进制指令集armv7情况④armv6armv6、
armv7s、
arm64<br />无响应
虽然编译成功了,但是并没有任何目标生成。
因为从XCode4.5开始,就不再支持armv6指令集,所以列表中写了也是白写。
情况⑤armv7、armv7s、
arm64armv7、
armv7serror报错生成二进制包支持的指令集编译出错error信息:
No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7分析:当Build Active Architecture Only起作用时:连接的手机指令集匹配是由高到低(arm64 > armv7s > armv7)依次匹配的。指令集都是可以向下兼容的
比如,你的设备是armv7s指令集,那么它也可以兼容运行比armv7s版本低的指令集:armv7、armv6
xcode对armv6指令集的支持Xcode4.5起不再支持armv6。
如何选择支持的指令集?
如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果。
很久前xcode支持的指令集是armv7/armv7s,后来改成只支持armv7后,比原来小了10MB左右。目前AppStore上的一些知名应用,比如百度地图、腾讯地图通过反汇编工具查看后,也都只支持armv7指令集。
根据向下兼容原则,armv7指令集的应用是可以正常在支持armv7s/arm64指令集的机器上运行的。
不过对于armv7s/arm64指令集设备来说,使用运行armv7应用是会有一定的性能损失,不过这种损失有多大缺乏权威统计数据,不会影响用户体验的。
建议:Valid Architectures通常Debug模式设置值为Yes,Release模式设置为No
参考链接:
1.armv6, armv7, armv7s的区别
2.Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64
3.Xcode设置项之Architectures和Valid Architectures
4.iOS工程如何支持64-bit