“32 位应用已死!”

凌云时刻

Android 全面拥抱 64 位 APP

不久前,小米应用商店、OPPO 软件商店、VIVO 应用商店、腾讯应用宝、百度手机助手联合宣布,今后在上述应用商店发布的所有应用必须支持 64 位架构,今年年底前全体应用及游戏均需按计划上传含有 64 位构建的应用包 apk。按照官方时间表,中国市场所有的移动安卓应用程序定于 2022 年 8 月底前全面普及 64 位。

其实全线下架 32 位 APP 早已经是业界的共识了,2018 年 iOS 11 发布的时候,苹果就已经全面淘汰了 32 位的应用 APP,但是安卓作为一个开源共享的项目,很难强制推行淘汰 32 位程序,虽然 2019 年谷歌也曾公告提醒开发者们停止开发新的 32 位 APP 或为其提供更新,但是这项计划并没有被严格执行。不过本次国内五大应用商店联合发布淘汰 32 位 APP 的计划,正式吹响了国内安卓 APP 全面转向 64 位 APP 的号角。

那么 32 位和 64 位的程序到底有什么不同,此次升级又到底有何必要?下面笔者就为大家一一解读。

32 位和 64 位相比到底差哪了?

从技术角度上看 64 位与 32 位,其实差异很大。十几年前,笔者刚刚进入金融行业的时候,就曾做过将应用由 32 位的服务器向 64 位小型机进行迁移的工作。

从实际编码来看,64 位与 32 位处理器的根本区别在于长整型 long 和指针类型 pointer 的长度发生了变化。在 32 位体系下,integer 与 pointer 长度相等,因此代码中常常把 pointer 转换为 int 或者 unsigned int 以便运算。但对 64 位处理器编程时,把指针或者 long 类型数据赋值给 int 型变量时,会发生数据截断与丢失。

从工作机制角度上看,64 位对 32 位的优势也是显而易见的。由于 32 位 CPU 一次只能处理 32 位长的数据,单指令处理能力不超过 2 的 32 次方,因此在对于 64 位数据进行加法运算时,就需要先进行低 32 位的加法,再将高 32 位相加,最后再把低 32 位的进位与结果进行合并处理,至少需要 4 条指令才能完成,而这对于 64 位处理器来讲只是一条指令的事。因此 32 位处理器的处理能力对比 64 位来说真不够看。

处理能力更强 64 位处理器是可以兼容 32 位程序的,不过让 64 位系统运行 32 位的程序其实是一种降级运行状态。

  • 一方面,32 位程序在如今的 64 位硬件上会导致性能严重得不到发挥,反而会造成无谓的卡顿;

  • 另一方面来说,由于32 位的程序 APP 往往都比较老旧,没有按照最新的开发指南进行编码,这也意味着 32 位程序往往也不会支持新版操作系统的各种省电、智能休眠特性,安全性也无从保障。所以从这个角度上讲淘汰 32 位手机 APP 对于广大用户来讲绝对是一件好事。

可能读到这里不少读者会问 128 位的处理器能否对于 64 位处理器形成碾压呢?

个人以为这个问题的答案是否定的,一方面目前 SIMD 也就是单指令多数据流技术,已经赋予 CPU 在一个指令周期内,处理 128 位乃至更长数据的能力了,尤其是新版的 ARM V9 还拿出了大杀招 SVE2 的新款 SIMD 指令集,这项技术支持操作数变长,使 ARM 芯片可以在一个指令周期内处理 128 到 2048 位变长的数据。可以说处理字长的问题已经基本不存在了,而且 64 位处理器对于内存寻址的能力一般可以达到 16T 甚至以上,这也足够强大了,再升级到 128 位意义不大。因此可以看到各大厂对于推出 128 位处理器基本都不太“感冒”。

Respect!那些伟大的 32 位经典

在笔者一名资深的游戏玩家眼中,32 位经典作品简直多到了数不胜数的地步,《生化危机》、《恶魔城月下夜想曲》、《寄生前夜》、《恐龙危机》等等都是 3A 级大作,尤其是最终幻想系列的第 8 部,其主题曲《Eyes on me》至今还是经久不衰。

笔者在前文《MIPS 已死,转身 RISC-V》当中曾经提到过,1994 年一代索尼 Play Station 横空出世,在 30 年前的远古时代就为广大玩家带来了为之尖叫的图像处理效率,而当时 Play Station 所搭载的 CPU 正是 32 位的一代传奇之作,MIPS R3000A。 

当然英特尔的 80386 也是不遑多让,80386DX 的内部和外部资料汇流排是 32 位,位址汇流排也是 32 位,可以管理 4GB 内存空间和 64TB 的存储空间。而且 386 还奠定了 X86 体系延用至今的三种工作模式。其中真实模式对应 16 位系统的运行模式,直接内存访问空间被限制在 1M 位元组;386 保护模式对应 32 位的工作模式,处理器可以直接访问 4G 位元组的内存,并具有异常处理机制;虚拟 86 模式中 386 可以同时模拟多个 8086 处理器,来加强多工处理能力。

初期推出的 80386 DX 处理器集成了大约 27.5 万个电晶体,工作频率为 12.5MHz。此后 80386 处理器逐步提高到 20MHz、25MHz、33MHz 直至最后的 40MHz。也正是在 386 真 32 位强大性能的加持下,才让当时的图形化操作系统 Windows 成为可能,也奠定了后来 Wintel 联盟统治 IT 生态十几年的基础。 

如果说 32 位 CPU 评选起来还存在争议的话,32 位操作系统的最强王者恐怕非 Windows XP 莫属,凭借着简单易用的功能和强大的稳定性,XP 统治 PC 操作系统十几年,甚至一直到 20 年后的今天,XP 依然还有不到 5% 的市场占有率,在手机都要和 32 位 APP 彻底告别的今天,还在桌面市场为 32 位程序保留了一席之地。但是经典虽多也架不住 64 位的狂轰滥炸。

来自于 64 位处理器的降维式打击

最近苹果的春季发布会搭载 M1 处理器的 iPad Pro,使平板电脑再度大放异彩,不过笔者个人认为 M1 处理器的重要性与苹果在 2013 年发布的 A7 处理器是等量齐观的。

搭建 A7 处理器的 iPhone 5s 这是全球第一个采用了 64 位处理器的智能手机。当时是 iPhone 5s 可以兼容 32 位的应用程序,因此这个升级对于当时的开发者来讲是透明的,因此当时在发布之初并未引起太多反响。

但是在全面发售之后人们发现 64 位的 A7 处理器火力全开,比之前的 A6 性能提升 2 倍,同时比第一代 iPhone CPU 性能提升 40 倍,GPU 提升 56 倍。这次重大升级也让苹果在移动 SOC 领域领先了其它竞争对手整整一个身位。也让安卓阵营的主要 SOC 供应商高通开启了 64 位的时代大门。

从历史上看,桌面领域 64 位处理器对于 32 位处理器同样也是降维打击。

2000 年左右,AMD 与英特尔在处理器领域的竞争非常激烈,不过 2004 年的奔腾与赛扬 D 的推出,奠定了英特尔在桌面处理器领域的统治地位,直到近几年 AMD 推出 ZEN 系列处理器情况才得以改观。

时来天地皆同力,运去英雄不自由,32 位应用程序虽然为整个移动互联网时代的繁荣做出过巨大贡献,但随着时间流逝英雄已经迟暮,该对我们说再见了,在此我们也挥手向那些经典告别,并致以敬意。

END

相关推荐