armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别
ARM处理器指令集
一. 苹果模拟器指令集:
指令集 | 分析 |
i386
|
针对intel通用微处理器32 架构的
|
x86_64
|
针对x86架构的64 位处理器
|
i386|x86_64
|
是Mac处理器的指令集,i386 是针对intel通用微处理器32 架构的。x86_64 是针对x86 架构的64 位处理器。
|
模拟器
并不运行arm
代码,软件会被编译成x86
可以运行的指令。所以生成静态库时都是会先生成两个.a
,一个是i386
的用于在模拟器
运行,另一个是在真实设备
上运行的,然后再用命令将两个.a
合并成一个(1+1=1
)。
二.苹果设备指令集相关
位数 | 指令集 |
---|---|
32 位ARM
|
armv6 、armv7 、armv7s
|
64 位ARM
|
arm64 、armv8
|
苹果A7 处理器支持两个不同的指令集:32位ARM 指令集(armv6|armv7|armv7s )和64位ARM 指令集(`arm64
|
armv8`)。 |
指令集 | 支持设备 |
---|---|
armv6 设备
|
第一代、第二代 iPod Touch |
armv7 设备
|
iPad, iPad2, iPad3(The New iPad), iPad mini; iPod Touch 3G, iPod Touch4 |
armv7s 设备
|
iPad4(iPad with Retina Display) |
ARMv8 /arm64 设备
|
iPad Air, iPad mini2(iPad mini with Retina Display) |
三. 苹果模拟器、设备指令集总结
模拟器 | 设备 |
---|---|
( |
( |
当使用iOS模拟器的时候会遇到i386
|x86_64
,iOS模拟器没有arm
指令集,编译运行的是x86指令集
,所以,只有在iOS设备
上,才会执行设备对应的arm指令集
。
四. XCode中与指令集相关
XCode中关于生成二进制包指令集相关的设置项有以下三个:
图.xcode设置
Xcode设置项 | 定义 | 注意事项 |
---|---|---|
Architecture
|
指你想 支持的指令集
|
该选项指定了工程 如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,从而会造成最终编译生成的 |
Valid architectures
|
指即将 编译的指令集
|
该选项指定
例如: |
Build Active Architecture Only
|
该编译项用于设置是否只 编译当前使用的设备 对应的arm指令集 。
|
使用条件: ①其值设置为 ② ①设置为 ②设置为 例如:当该选项设置成 |
假定:我们将Build Active Architecture Only
值设置为YES
,同时Xcode
连接上手机iPhone5S
匹配指令集arm64
)。如下五种
情况总结如下表:
情况 | Architectures | ValidArchitectures | 结果 | 分析 |
---|---|---|---|---|
情况① |
armv7、armv7s 、arm64
|
armv6、armv7s 、arm64
|
arm64
|
因为:取交集 所以:为 |
情况② |
armv6 、armv7、 armv7s
|
armv6 、armv7s 、arm64 |
armv7s
|
因为:取交集 所以:为 |
情况③ |
armv6 armv7 |
armv6、 armv7s、 arm64 |
armv7
|
无交集。但是因为:ValidArchitectures 支持armv7s 则必然支持armv7 ,Architectures支持armv7,从XCode4.5 开始,就不 再支持armv6 指令集。所以:最终生成二进制指令集armv7
|
情况④ | armv6 |
armv6、 armv7s、 arm64 |
<br />无响应 |
虽然 因为从 |
情况⑤ |
armv7、 armv7s、 arm64 |
armv7、 armv7s |
error报错 |
生成二进制包支持的指令集编译出错error 信息:
|
- 分析:
- 当
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
armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别相关推荐
- ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64
ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64 mp3转码静态库libmp3lame.a,成功加入arm64支持后, 顺便把之前记录的二维码静态库libzbar ...
- armv6, armv7, armv7s和i386
出现这类问题一般与静态库有关. i386是代表模拟器,显示i386错误说明静态库不支持模拟器,只支持真机. armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的.如 ...
- xcode armv6 armv7 armv7s arm64
眼下ios的指令集有下面几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...
- xcode armv7 armv7s arm64
armv6 armv7 armv7s arm64引起编译包翻倍增大的问题,下边来说一下关于ios这个指令集 目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G ...
- iOS armv7,armv7s, arm64
目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...
- 关于iOS 编译器 armv7 armv7s arm64 i386 x86_64
armv7 armv7s arm64 是ARM处理器的指令集 i386 x86_64 处理的指令集 对应的设备 arm64:iPhoneX | iphone8 plus|iPhone8| iPhone ...
- android ndk x86 arm,NDK r21编译FFmpeg 4.2.2(x86、x86_64、armv7、armv8)
1.编译FFmpeg 准备Ununtu.ndk r21(linux).FFmpeg. 准备编译脚本,这里有两个,其中一个是专门针对armv7的. armv7 #!/bin/bash API=21 #a ...
- 关于.framework 文件过大 移除包内对i386 x86_64 的支持
一,首先是对当前.framework 支持平台的查看,本例 ISBusinessCardSDK.framework 放置在桌面, 第一步cd 到 ISBusinessCardSDK.framework ...
- ARMv7和ARMv8架构比较
架构 处理器家族 芯片型号(三星) ARMv3 ARM6.ARM7 S3C44B0 ARMv4 StrongARM.ARM7TDMI.ARM9TDMI S3C2440/S3C2410 ARMv5 AR ...
- 第26月第22天 iOS瘦身之armv7 armv7s arm64选用 iOS crash
1.iOS瘦身之armv7 armv7s arm64选用 机器对指令集的支持是向下兼容的,因此armv7的指令集是可以运行在iphone5S以上的,只是效率没那么高而已~ 但是由于苹果要求必须支持ar ...
最新文章
- jquery.ajax
- html 如何改变图片形状,图形变换的三种方式是什么?
- 将 AR 新创公司收入囊中后,Lyft 的自动驾驶脚步要加快了
- 【Sqoop】sqoop导入导出
- JMeter简介及其安装
- 我运维生涯的第一个Blog
- pyqt:使用qrc文件配置图片资源,生成py文件
- 让工程师拥有一台“超级”计算机——字节跳动客户端编译加速方案
- 逻辑回归算法梳理(从理论到示例)
- Web服务器(Apache)与Servlet容器(Tomcat)
- 程序员外包兼职平台介绍
- 前端常用PS技巧总结之更换图片背景图片
- 小猪短租住房信息爬取
- 一个内嵌全国高校地图的小程序,走到哪导航到哪
- mysql-8.0.28-winx64安装步骤
- Splay Tree
- 计蒜客题解——T1213:拯救行动
- 孫子に学ぶITマネジメント CIOの予算獲得編(2)彼を知り己を知る
- 2021极客大挑战web部分wp
- kafka关于副本的理解
热门文章
- 输入身份证自动回填地址,年龄,个人详细信息
- android刷机方法,安卓手机怎么刷机?安卓手机两种刷机方法介绍
- 黑苹果 efi如何替换_小白第一次安装黑苹果,然后卡代码,别着急,教你一个通用步骤,一个一个排查,大部分是可以解决的,毕竟安装不是最难的一个步骤...
- cad 万能字体_好东西!相见恨晚的50个CAD技巧
- 【随笔】TongWeb 常见报错
- matlab更改安全密钥,Linux下设置安全密钥登录
- 网易云音乐ncm文件格式转mp3格式教程
- 这是我对智能制造的所有理念
- iOS 集成极光推送 (swift版)
- CentOS hping3安装和应用