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)。

二.苹果设备指令集相关

位数 指令集
32ARM armv6armv7armv7s
64ARM arm64armv8
苹果A7处理器支持两个不同的指令集:32位ARM指令集(armv6|armv7|armv7s)和64位ARM指令集(`arm64 armv8`)。
指令集 支持设备
armv6 设备

iPhone, iPhone2, iPhone3G;

第一代、第二代 iPod Touch

armv7 设备

iPhone3GS, iPhone4, iPhone4S;

iPad, iPad2, iPad3(The New iPad), iPad mini;

iPod Touch 3G, iPod Touch4

armv7s设备

iPhone5, iPhone5C,

iPad4(iPad with Retina Display)

ARMv8/arm64设备

iPhone5S,iPhone6s(plus)iPhoneSEiPhone7(plus)

iPad Air, iPad mini2(iPad mini with Retina Display)

三. 苹果模拟器设备指令集总结

模拟器 设备

x86

(i386x86_64

arm

(armv6armv7armv7sarmv8armv64

当使用iOS模拟器的时候会遇到i386x86_64,iOS模拟器没有arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集

四. XCode中与指令集相关

XCode中关于生成二进制包指令集相关的设置项有以下个:

图.xcode设置

Xcode设置项 定义 注意事项
Architecture 指你支持的指令集

该选项指定了工程将被编译成支持哪些指令集

如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,从而会造成最终编译生成的包很大

Valid architectures 即将编译的指令集

该选项指定可能支持的指令集,该Valid architectures列表Architectures列表交集,将是Xcode最终生成二进制包所支持的指令集

限制可能被支持的指令集的范围

例如Valid Architectures设置的支持arm指令集有:armv7/armv7s/arm64,对应的Architectures设置的支持arm指令集有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包

Build Active Architecture Only 该编译项用于设置是否只编译当前使用的设备对应的arm指令集

使用条件:

①其值设置为YES;

XCode成功连接调试设备;(必须同时满足才会起作用)Xcode中设置

①设置为Yes, 编译速度更,它只编译当前的architecture版本;

②设置为No,编译速度更会编译所有的版本

例如:当该选项设置成YES时,你连上一个armv7指令集的设备(iPhone5、5c),就算你的Valid ArchitecturesArchitectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。

假定:我们将Build Active Architecture Only值设置为YES,同时Xcode连接上手机iPhone5S匹配指令集arm64)。如下五种情况总结如下表:

情况 Architectures ValidArchitectures 结果 分析
情况① armv7、
armv7s
arm64
armv6、
armv7s
arm64
arm64

因为:取交集arm64armv7s,但iPhone5S匹配指令集arm64

所以:为arm64

情况② armv6
armv7、
armv7s
armv6
armv7s
arm64
armv7s

因为:取交集armv6armv7s,但iPhone5S匹配指令集arm64,但同时支持armv7s,同时XCode4.5开始,就再支持armv6指令集

所以:为arm64

情况③ armv6
armv7
armv6、
armv7s、
arm64
armv7 无交集。但是因为:ValidArchitectures支持armv7s则必然支持armv7,Architectures支持armv7,从XCode4.5开始,就再支持armv6指令集。所以:最终生成二进制指令集armv7
情况④ armv6 armv6、
armv7s、
arm64
<br />无响应

虽然编译成功了,但是并没有任何目标生成

因为从XCode4.5开始,就再支持armv6指令集,所以列表中写了也是白写。

情况⑤ armv7、
armv7s、
arm64
armv7、
armv7s
error报错 生成二进制包支持的指令集编译出错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
    xcodearmv6指令集的支持
  • Xcode4.5再支持armv6

如何选择支持的指令集

如果你的软件对安装包大小非常敏感,你可以减少安装包中的指令集数据包,而且这能达到立竿见影的效果。

很久前xcode支持的指令集是armv7/armv7s,后来改成只支持armv7后,比原来小了10MB左右。目前AppStore上的一些知名应用,比如百度地图、腾讯地图通过反汇编工具查看后,也都只支持armv7指令集。

根据向下兼容原则,armv7指令集的应用是可以正常在支持armv7s/arm64指令集的机器上运行的。

不过对于armv7s/arm64指令集设备来说,使用运行armv7应用是会有一定的性能损失,不过这种损失有多大缺乏权威统计数据,不会影响用户体验的。

建议:Valid Architectures通常Debug模式设置值为YesRelease模式设置为No

参考链接:

1.armv6, armv7, armv7s的区别
2.Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64
3.Xcode设置项之Architectures和Valid Architectures
4.iOS工程如何支持64-bit

</article>

[转帖]armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别的更多相关文章

  1. armv6, armv7, armv7s的区别

    ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的. armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是 ...

  2. Xcode 中armv6 armv7 armv7s arm64 i386 x86_64 归纳 (Architectures, Valid Architectures, Build Active Architecture Only)

    http://www.jianshu.com/p/09b445300d40 简介: armv7|armv7s|arm64都是ARM处理器的指令集 i386|x86_64 是Mac处理器的指令集 目前i ...

  3. xcode armv6 armv7 armv7s arm64

    目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...

  4. iOS设备的硬件适配 (关于armv6, armv7, armv7s ) <转>

    <转> http://blog.csdn.net/smking/article/details/8148702 1.OpenGL ES版本支持   iPhone:iPhone 3G以下(包 ...

  5. iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a

    一.概要 平时项目开发中,可能使用第三方提供的静态库.a,如果.a提供方技术不成熟,使用的时候就会出现问题,例如: 在真机上编译报错:No architectures to compile for ( ...

  6. armv7 armv7s arm64

    arm处理器以其低功耗和小尺寸而闻名,几乎所有的手机处理器都是基于arm,在嵌入式系统中应用非常广泛.   armv6, armv7, armv7s, arm64指的是arm处理器的指令集. i386 ...

  7. ios开发之--armv7,armv7s,arm64,i386,x86_64详解

    有时候在运行的时候,经常出现诸如i386的错误,最新一些可能会出现 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch ...

  8. iOS开发~制作同时支持armv7,armv7s,arm64,i386,x86_64的静态库.a以及 FrameWork 的创建

    armv7,armv7s,arm64,i386,x86_64 详解 一.概要 平时项目开发中,可能使用第三方提供的静态库.a,如果.a提供方技术不成熟,使用的时候就会出现问题,例如: 在真机上编译报错 ...

  9. xcode5.1 armv7 armv7s arm64 类型, 区分, 概念等

    官方: https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/In ...

  10. 关于No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=armv7 armv7s)使用百度地图的解决办法

    出现的原因:armv7s是应用在iPhone 5 A6 的架构上的解决的方式:1,在Project target里“Architectures”设置为“Standard (armv7,armv7s)” ...

随机推荐

  1. flex布局之美,以后就靠它来布局了

    写在前面 在很久很久以前,网页布局基本上通过table 元素来实现.通过操作table 中单元格的align 和valign可以实现水平垂直居中等 再后来,由于CSS 不断完善,便演变出了:标准文档流 ...

  2. 三步实现BERT模型迁移部署到昇腾

    本文分享自华为云社区 <bert模型昇腾迁移部署案例>,作者:AI印象. 镜像构建 1. 基础镜像(由工具链小组统一给出D310P的基础镜像) From xxx 2. 安装mindspor ...

  3. 源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻

    摘要:GOTC 全球开源技术峰会在上海张江科学会堂成功举办. 本文分享自华为云社区<源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻>,作者:华为云云原生团队. GOTC ...

  4. 云图说|云数据库GaussDB如何做到卓越性能

    摘要:对于数据库来说,性能一直被视为最关键的部分.GaussDB作为华为自主创新研发的分布式关系型数据库,那么华为云数据库GaussDB在提升数据库性能方面都有哪些黑科技呢? 本文分享自华为云社区&l ...

  5. PreSTU:一个专门为场景文本理解而设计的简单预训练模型

    摘要:在视觉与语言(V&L)模型中,阅读和推理图像中的文本的能力往往是缺乏的.我们如何才能学习出强大的场景文本理解(STU)的V&L模型呢? 本文分享自华为云社区<场景文本理解预 ...

  6. Scrum Master需要具备哪些能力和经验

    摘要:ScrumMaster对于产品负责人和开发团队来说,履行的是教练的职责,帮助团队和组织其他成员发展具有组织特色的.高效的Scrum方法,贯彻执行敏捷思想,激励团队持续提升,并不懈追求卓越的表现. ...

  7. storybook添加全局样式与sass全局变量设置

    storybook组件需要全局样式,只需在.storybook/preview.js 增加全局样式即可. import '../src/style/index.scss'; export const  ...

  8. 有什么好用的C/C++源代码混淆工具?

    开始使用ipaguard 前言 iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆.加密.使用任何工具都无法逆向.破解还原源文件.对APP进行完 ...

  9. IAST 初探:博采众长、精准定位、DevOps友好

    之前的文章中,我们了解了 SAST 和 DAST,本文将介绍将两者优势相结合的安全测试技术--IAST. ✦ ✦ 交互式应用安全测试(IAST)是一个自动识别和诊断应用程序和 API 漏洞的技术,它结 ...

  10. 对话 BitSail Contributor | 刘啸:参与开源,提升自我技术力

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 2022 年 10 月,字节跳动 BitSail 数据引擎正式开源.同期,社区推出 Contributor 激励计 ...