android 应用 32 位和 64 位有什么实质上的区别?

2022-08-17 17:34:19 +08:00
 eyeshuaji
来点干货,“更省电更流畅”这些太笼统了
7250 次点击
所在节点    Android
22 条回复
a1105288116
2022-08-17 18:04:00 +08:00
编译器不一样?
lakehylia
2022-08-17 18:08:17 +08:00
现在手机 CPU 基本都是 64 位的了,64 位的 CPU 是兼容 32 位的应用的。64 位的 CPU 兼容 32 位的应用一般是通过虚拟机实现,64 位的 CPU 运行 64 位的应用,就可以直接跑。
yukiww233
2022-08-17 18:12:00 +08:00
podel
2022-08-17 18:14:12 +08:00
主要还是很多 android 程序本质上使用了外部的 C/C++编译的裤。调用了这些功能。
这些外部库是 32/64 位的 ARM 二进制 不是很兼容。
feather12315
2022-08-17 18:16:42 +08:00
最直观的:地址空间大小不同。
这里的地址空间不仅仅是 RAM ,还包括设备空间
icyalala
2022-08-17 18:31:24 +08:00
efcndi
2022-08-17 18:33:21 +08:00
Windows 应用 32 位和 64 位有什么实质上的区别?
moen
2022-08-17 18:38:09 +08:00
体验上的实质区别得在新的硬件上才体现得比较明显,因为 Android 的 64 位迁移已经是要靠硬件来强制推动,之前靠软件层面的推动都不怎么有效

去年的一些三丛集 ARMv9 架构 CPU 只有大核保留兼容 32 位的指令集,这意味着 32 位的应用全程只能运行在大核上,利用不了超大核的性能以及小核的低功耗,相比 64 位的应用会显得性能不佳且耗电
而 ARM 最新发布的公版 CPU 其大核也砍掉了 32 位指令集的兼容,这种情况下的区别就更明显了——32 位应用根本无法运行
AoEiuV020CN
2022-08-17 18:47:03 +08:00
没感觉的,Windows32 位 64 位共存都多少年了,也没人拒绝 32 位,单从使用体验甚至无法判断是不是 32 位,
q1angch0u
2022-08-17 18:49:16 +08:00
long 的长度不一样 [狗头]
z836454898
2022-08-17 18:51:46 +08:00
@lakehylia 64 位原生支持 32 位啊,只不过 CPU 通信带宽被浪费一半了
taobibi
2022-08-17 19:43:13 +08:00
你还别说,我打算实际测试一下,我还有能勉强开机的 nvidia tegra 4 设备,tegra 4 应该是 32 位 cpu 的性能绝唱了。测试一下纯 32 位性能和现在 64 位兼容 32 位的这种性能提升
geekvcn
2022-08-17 20:55:35 +08:00
没区别,内存寻址空间不同,不兼容 32 位可以减少软件维护成本和硬件晶体管数量。32 位软件同样的功能,在不需要超过 4G 内存的时候,占用内存反而更少。另外现在安卓应用大多数基于 WebView ,也就是 WebView 升级到 64 位罢了。32 位跑 int64 和双精度浮点,需要两个时钟周期,64 位只需要一个。所以为了性能,一般 32 位软件都用 int32 ,更容易数据溢出
JensenQian
2022-08-17 22:16:20 +08:00
以后安卓应该 32 位会逐渐消失了
骁龙 8,8+,天玑 9000 这三安卓最新的顶级 soc 都是只有 3 个大核 A710 支持 32 位,arm 还说为了国内客户需求保留的
JensenQian
2022-08-17 22:24:28 +08:00
@JensenQian #14 还有国内四大手机厂商,华米 ov 的应用商店也不让 32 位的包上去了
硬件还有软件上 32 位都会逐渐消失了
刚看了下我手机上 32 位的还有一个中行 app 和 tim 是 32 位的了
beginor
2022-08-17 23:40:30 +08:00
64 位可以使用更大的内存,怎么样,很快手机内存也得卷上 32G 了
WebKit
2022-08-18 01:15:33 +08:00
@z836454898 最新的骁龙 8 已经不支持 32 位了。运行 32 位应用是通过模拟进行的
WebKit
2022-08-18 01:16:41 +08:00
@geekvcn 大多数基于 webview ?你从从哪里得出这个结论的。目前原生还是多于 H5 的
XXWHCA
2022-08-18 10:17:22 +08:00
对纯 JAVA 应用来说没有区别,因为全部运行在 ART 虚拟机内,区别也是虚拟机指令集性能的差异。
对于 Native 应用(涉及到 JNI ,NDK )来说会有一定影响,总体来说 arm64 会比 arm v7a 性能更好,但是一般无法更好来对比,因为硬件的发展导致新架构就算以兼容模式运行老架构代码,性能上也有很大的提升。还有性能上的影响很大一部分和代码编写有关,好的代码在老架构也是很高效的。
XXWHCA
2022-08-18 10:31:48 +08:00
实际上省电是多方面导致的。最关键的是架构升级带来的指令集性能提升,然后就是硬件制造工艺的提升,这两部分就可以大大提升芯片性能并降低发热量;然后还有一部分软件方面的调教,通过控制芯片供电、频率等方式来降低功耗。
实际上 cpu 的消耗的电量可以说全部用来发热了,性能的提升会缩短运行代码的时间,运行时间越短发热也就越小,从而更省电。
但是这只是大部分场景下,还有一些特殊情况,比如芯片都有侧重点,比如最常见的 CPU 和 GPU ,如果使用 CPU 进行图像渲染,显然会很低效,所以 CPU 进行逻辑运算浮点运算等,GPU 进行图像运算,只有各司其职才可以更加高效。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/873531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX