64 位应用程序和 32 位应用程序相比有什么优势吗?为什么手机厂商都说 64 位更快更省电?

349 天前
 asdgsdg98
就我个人使用上来说,64 位程序的优势就是能利用 4G 以上的内存。32 位程序不能用 4G 以上内存,会报 out of memory 。
除此之外,64 位程序的体积更大(更占硬盘),内存消耗更大(更占 RAM ),并且在不需要占用超过 4G 内存的情况下,运行速度两者没有显著差异。

是因为 aarch64 平台和 x86-64 平台不一样?我手机用的少
1856 次点击
所在节点    问与答
13 条回复
72MpQOSsJhyLs88N
349 天前
可以把全家桶塞到一个软件里了
billlee
349 天前
x86-64 上可以使用的寄存器更多,更宽,arm 不清楚
asdgsdg98
349 天前
@xianghou 确实,一个个 app 怕切程序被系统杀给你所有功能都做进去

@billlee 看了下文章,arm64 位平均快 0.1 秒左右……
crysislinux
349 天前
貌似 32 位是单独的一块核支持的,只是为了维持兼容性,制程可能也没 64 位的高。就费电了
asdgsdg98
349 天前
@crysislinux 感觉是正确答案了,搜了下新芯片上了 armv9 ,完全不兼容 32 位完全无法运行。所以手机厂要赶着上 64 位。
ly841000
349 天前
x86-64 指令和地址位更长,同样的指令需要的缓存更多,大多程序并不会更快
muntoya
349 天前
因为不管你用不用 64 位程序,CPU 和系统都是 64 位了。一个程序以 32 位运行,64 位的数据得操作两次,以 64 位运行一次就够了。不过这是理论上的,很多程序转为 64 位单纯就是为了兼容把 32 位扩到 64 位,没有做优化。
asdgsdg98
349 天前
@ly841000 我用那么多年电脑确实没感觉到 64 位更快过。除此之外我还能想到的优势就是 arm on Windows 上 64 位程序转译效率远胜 32 位
stinkytofu
349 天前
很简单, 不是说 64 位比 32 位快, 是因为 64 位更现代,CPU 都是围绕 64 位设计的,32 位只是历史的包袱,32 位程序是后娘养的, 支持 64 位的程序可以获得更多的计算资源, 当然快啦!!!
asdgsdg98
349 天前
@muntoya
@stinkytofu 以前为了兼容性都收集的 32 位程序,现在感觉可以换了,也没人用 32 位系统了,提前备战 arm Windows
Herry001
349 天前
因为新的芯片压根不支持 32 位……现在都是靠模拟在跑
msg7086
349 天前
上面说的丢包袱算是最大的区别了。
比如说 x86 平台上,支持 32 位意味着你需要支持三十年前的 MMX 技术,然后你编译软件的时候 target 可以选八十年代的 80386 ,就算是选比较新的 target 那也是九十年代的 i686 。你的编译器要为了去支持古老的 CPU 而生成很多不必要的代码,做不必要的兼容。(再加上 MMX 和 64 位寄存器是共用的,意味着 CPU 要增加很多数据擦除和切换的成本)
而 AMD64 平台则必定有 SSE2 ,最差最差也可以支持一定量的 SIMD 矢量并行技术,既不需要编译成标量版本,也不需要标量矢量各编译一遍然后动态切换。

对硬件也是一样,跑 32 位程序需要在硬件上留下 32 位指令集处理的部分,现在新的 ARM CPU 为了提高效率已经把这块删了。
jim9606
348 天前
对 x86 来说就是更多可用的寄存器,以及可以在关键路径上使用启用新的 AVX/AVX2 指令来优化。虽然说同一个程序可以同时为新旧 cpu 提供多个执行路径,但编译器自动优化未必会这样做。
ARM 的问题是现在有不支持 AArch32 模式的 ARMv9 处理器核了,换句话说不能保证 ARMv5/v7 目标的程序可以在所有处理器上运行。出于兼容,或者就是懒,以及减小程序体积,不在乎性能,是大部分消极跟进 64 位应用的原因。

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

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

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

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

© 2021 V2EX