1
72MpQOSsJhyLs88N 2023-12-14 20:26:17 +08:00
可以把全家桶塞到一个软件里了
|
2
billlee 2023-12-14 20:33:56 +08:00
x86-64 上可以使用的寄存器更多,更宽,arm 不清楚
|
3
asdgsdg98 OP |
4
crysislinux 2023-12-14 20:38:40 +08:00 via Android
貌似 32 位是单独的一块核支持的,只是为了维持兼容性,制程可能也没 64 位的高。就费电了
|
5
asdgsdg98 OP @crysislinux 感觉是正确答案了,搜了下新芯片上了 armv9 ,完全不兼容 32 位完全无法运行。所以手机厂要赶着上 64 位。
|
6
ly841000 2023-12-14 20:46:10 +08:00
x86-64 指令和地址位更长,同样的指令需要的缓存更多,大多程序并不会更快
|
7
muntoya 2023-12-14 20:49:06 +08:00
因为不管你用不用 64 位程序,CPU 和系统都是 64 位了。一个程序以 32 位运行,64 位的数据得操作两次,以 64 位运行一次就够了。不过这是理论上的,很多程序转为 64 位单纯就是为了兼容把 32 位扩到 64 位,没有做优化。
|
8
asdgsdg98 OP @ly841000 我用那么多年电脑确实没感觉到 64 位更快过。除此之外我还能想到的优势就是 arm on Windows 上 64 位程序转译效率远胜 32 位
|
9
stinkytofu 2023-12-14 21:03:51 +08:00
很简单, 不是说 64 位比 32 位快, 是因为 64 位更现代,CPU 都是围绕 64 位设计的,32 位只是历史的包袱,32 位程序是后娘养的, 支持 64 位的程序可以获得更多的计算资源, 当然快啦!!!
|
10
asdgsdg98 OP |
11
Herry001 2023-12-14 21:29:37 +08:00
因为新的芯片压根不支持 32 位……现在都是靠模拟在跑
|
12
msg7086 2023-12-15 01:10:37 +08:00 2
上面说的丢包袱算是最大的区别了。
比如说 x86 平台上,支持 32 位意味着你需要支持三十年前的 MMX 技术,然后你编译软件的时候 target 可以选八十年代的 80386 ,就算是选比较新的 target 那也是九十年代的 i686 。你的编译器要为了去支持古老的 CPU 而生成很多不必要的代码,做不必要的兼容。(再加上 MMX 和 64 位寄存器是共用的,意味着 CPU 要增加很多数据擦除和切换的成本) 而 AMD64 平台则必定有 SSE2 ,最差最差也可以支持一定量的 SIMD 矢量并行技术,既不需要编译成标量版本,也不需要标量矢量各编译一遍然后动态切换。 对硬件也是一样,跑 32 位程序需要在硬件上留下 32 位指令集处理的部分,现在新的 ARM CPU 为了提高效率已经把这块删了。 |
13
jim9606 2023-12-15 09:53:40 +08:00 via Android 1
对 x86 来说就是更多可用的寄存器,以及可以在关键路径上使用启用新的 AVX/AVX2 指令来优化。虽然说同一个程序可以同时为新旧 cpu 提供多个执行路径,但编译器自动优化未必会这样做。
ARM 的问题是现在有不支持 AArch32 模式的 ARMv9 处理器核了,换句话说不能保证 ARMv5/v7 目标的程序可以在所有处理器上运行。出于兼容,或者就是懒,以及减小程序体积,不在乎性能,是大部分消极跟进 64 位应用的原因。 |