iOS 指令集

ARM 处理器

Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色

Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼容的,如iPhone4S的CPU默认指令集为armv7指令集,但它同时也兼容armv6指令集,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性,同理,iPhone5的处理器标配armv7s指令集,同时也支持armv7指令集,只是无法进行相关的性能优化,从而导致程序的执行效率没那么高。

需要注意的是iOS模拟器没有运行arm指令集,编译运行的是x86指令集,所以,只有在iOS设备上,才会执行设备对应的arm指令集

iPhone的指令集

支持两个不同的指令集:32位ARM指令集(armv6|armv7|armv7s)和64位ARM指令集(arm64),i386|x86_64 是Mac处理器的指令集,i386是针对intel通用微处理器32架构的。x86_64是针对x86架构的64位处理器。当使用iOS模拟器的时候会遇到i386|x86_64,iOS模拟器没有arm指令集。模拟器: 4s~5 : i386 5s~6plus : x86_64

X86-64简称x64. 都是64位的.

X86-32简称x86,是一个系列(如80186,80286,80386) .都是32位的.

i386: 即intel80386.是intel公司的一款x86系列CPU.发布于1985年10月17日.将PC从16位时代带入了32位时代.

i386是针对intel通用微处理器32位处理器

x86_64是针对x86架构的64位处理器

模拟器32位处理器测试需要i386架构,

模拟器64位处理器测试需要x86_64架构,

真机32位处理器需要armv6、armv7或者armv7s架构,

真机64位处理器需要arm64架构

不同型号的iPhone都使用的是什么指令集:

连接的手机指令集匹配是由高到低(arm64 > armv7s > armv7>armv6)依次匹配的

ARMv8==ARM64

  • iPhone : ARMv6
  • iPhone 3G : ARMv6
  • iPhone 3GS : ARMv7
  • iPhone 4 : ARMv7
  • iPhone 4S : ARMv7
  • iPhone 5 : ARMv7s
  • iPhone 5c : ARMv7s
  • iPhone 5s : ARMv8
  • iPhone 6 : ARMv8
  • iPhone 6 Plus : ARMv8
  • iPhone 6s : ARMv8
  • iPhone 6s Plus: ARMv8
  • iPhone SE : ARMv8
  • iPhone 7 : ARMv8
  • iPhone 7 Plus : ARMv8
  • iPhone 8 : ARMv8
  • iPhone 8 Plus : ARMv8
  • iPhone X : ARMv8
查看静态库/动态库的CPU指令集

进入库文件所在的路径

查看framework

lipo -info xxx.framework/xxxxFramework

查看.a文件

lipo -info libavcodec.a

他会告诉你它所支持的指令集

关于指令集常见的错误

Undefined symbols for architecture armv7

这是我用脚本编译FFmpeg库后倒入到工程里,然后在真机的iphone 5上运行报的错

iOS 指令集_第1张图片
image.png

这是因为脚本文件里写支持cpu架构的只加了

archs="arm64 armv7 x86_64 i386"

而iphone5手机的cpu架构是 armv7s,所以报错的,当我换上iphone7的时候就编译通过了

你可能感兴趣的:(iOS 指令集)