V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
asdgsdg98
V2EX  ›  问与答

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

  •  
  •   asdgsdg98 · 136 天前 · 1491 次点击
    这是一个创建于 136 天前的主题,其中的信息可能已经有所发展或是发生改变。
    就我个人使用上来说,64 位程序的优势就是能利用 4G 以上的内存。32 位程序不能用 4G 以上内存,会报 out of memory 。
    除此之外,64 位程序的体积更大(更占硬盘),内存消耗更大(更占 RAM ),并且在不需要占用超过 4G 内存的情况下,运行速度两者没有显著差异。

    是因为 aarch64 平台和 x86-64 平台不一样?我手机用的少
    13 条回复    2023-12-15 09:53:40 +08:00
    CaoUsDog
        1
    CaoUsDog  
       136 天前
    可以把全家桶塞到一个软件里了
    billlee
        2
    billlee  
       136 天前
    x86-64 上可以使用的寄存器更多,更宽,arm 不清楚
    asdgsdg98
        3
    asdgsdg98  
    OP
       136 天前
    @xianghou 确实,一个个 app 怕切程序被系统杀给你所有功能都做进去

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

    对硬件也是一样,跑 32 位程序需要在硬件上留下 32 位指令集处理的部分,现在新的 ARM CPU 为了提高效率已经把这块删了。
    jim9606
        13
    jim9606  
       135 天前 via Android   ❤️ 1
    对 x86 来说就是更多可用的寄存器,以及可以在关键路径上使用启用新的 AVX/AVX2 指令来优化。虽然说同一个程序可以同时为新旧 cpu 提供多个执行路径,但编译器自动优化未必会这样做。
    ARM 的问题是现在有不支持 AArch32 模式的 ARMv9 处理器核了,换句话说不能保证 ARMv5/v7 目标的程序可以在所有处理器上运行。出于兼容,或者就是懒,以及减小程序体积,不在乎性能,是大部分消极跟进 64 位应用的原因。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1506 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:06 · PVG 01:06 · LAX 10:06 · JFK 13:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.