[转帖]armv6、armv7、armv7s、armv8、armv64及其i386、x86_64区别

armv6,armv7,armv7s,armv8,armv64,及其,i386,x86,区别 · 浏览次数 : 0

小编点评

**ARM处理器指令集** **i386**针对intel通用微处理器32架构的x86架构的64位处理器i386|x86_64是Mac处理器的指令集,i386是针对intel通用微处理器32架构的。 **苹果设备指令集**相关 位数指令集: * 32位ARM指令集(armv6|armv7|armv7s) * 64位ARM指令集(`arm64armv8`) **XCode中与指令集相关** * **Valid Architectures**指即将编译的指令集,该选项指定可能支持的指令集。 * **Architectures**指支持的指令集范围。 * **Build Active Architecture Only**选项用于设置是否只编译当前使用的设备对应的arm指令集。

正文

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

二.苹果设备指令集相关

位数指令集
32ARMarmv6armv7armv7s
64ARMarm64armv8
苹果A7处理器支持两个不同的指令集:32位ARM指令集(armv6|armv7|armv7s)和64位ARM指令集(`arm64armv8`)。
指令集支持设备
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)。如下五种情况总结如下表:

情况ArchitecturesValidArchitectures结果分析
情况①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
情况④armv6armv6、
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区别相似的内容:

[转帖]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

[转帖]ARMv7/ARMv8/ARMv9架构你不知道的那些事

https://aijishu.com/a/1060000000370631 1、虽然市场上还经常看到armv7的产品,也有很多同学在学习armv7。但armv7已经出来15年了,armv8也出来10年了。2、虽然ARM非常火热,占据整个市场的各个领域,各类程序员都和ARM有着密切关系,但至今没有一

[转帖]ARMv8架构概述、相关技术文档以及ARMv8处理器简介

ARMv8架构 文章目录 ARMv8架构参考文档ARMv8架构的概述从32位到64位的变化The changes from 32 bits to 64 bits1,Larger register pool(更大的寄存器池)2,Wider integer registers(具有更宽的整数寄存器)3,

[转帖]Armv9 架构相比 Armv8 有何升级/区别:全面性能提升

https://baijiahao.baidu.com/s?id=1695708603852200216&wfr=spider&for=pc 自 2011 年 10 月 Arm 首次公布 Armv8 架构以来,已经有近 10 年的时间了,这是计算领域相当多变的 10 年,因为指令集架构通过移动领域到

[转帖]浅谈Armv8-A处理器

https://www.elecfans.com/emb/dsp/202208291886182.html 众所周知,ARM是一家设计并授权处理器和相应IP(比如互连总线,中断处理器,图像处理器等等)的公司,目前其处理器产品分为三类: Cortex-A系列:这个系列主要是应用(Application

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防