【问题标题】:Whatis the difference between a 32bit program on a 32bit OS and 32bit program on a 64bit OS?32 位操作系统上的 32 位程序和 64 位操作系统上的 32 位程序有什么区别?
【发布时间】:2015-09-26 10:36:58
【问题描述】:

在我的计算机中,它在 64 位处理器上运行 32 位操作系统。所以安装的所有应用程序都是 32 位的,我的电脑有 2GB 内存。如果我在安装 64 位操作系统的同时保留相同的 32 位应用程序,这会提高性能吗?或者有什么缺点?

【问题讨论】:

  • 这不是一个编码问题...但是:如果您的计算机只有 2 GB RAM,那么您肯定不会从使用 64 位 Windows 中受益...
  • @ThomasKrojer 除非它在 ​​x86/x86_64 的情况下对较大的寄存器文件有用。
  • @ThomasKrojer 实际上,可以在 64 位模式下运行 CPU 并使用 32 位地址,如 the x32 ABI
  • @diapir:这不是问题:OP 询问,当他在只有 2GB 内存的 64 位操作系统上使用 32 位软件时,他是否有好处。答案:没有好处。
  • @ThomasKrojer 我在 random_user 评论中详细说明了 x64 上更大的寄存器文件(16 个寄存器对 8 个),指出 x64 代码可以运行得更快,并且坚持使用 32 位地址空间可以进一步提高性能。所以实际的答案是视情况而定,对于只有 2Go RAM 的计算机,由于交换,性能很可能会恶化。但同样,这取决于使用情况。

标签: windows 32bit-64bit 32-bit


【解决方案1】:

64 位的关键在于应用可以使用超过 2GB 的虚拟内存。如果您有超过 4gb 的内存并且您的应用程序需要使用超过 2gb 的内存(sql server!),那么可能会有一个性能内存(因为它可以在内存中存储更多页面而不是从磁盘读取它们)

如果不是这种情况并且您拥有相同数量的内存,那么您将不会获得性能提升,并且可能会略有下降(假设您在此处使用 Windows)来处理在 64 上运行的 32 位应用程序位 o/s 发生了一个复杂的重定向系统(应用程序要求 system32 并发送到 syswow64) - 其中一些很简单,但有些像 com 注册查找可能会导致许多 reg 在后台打开(为一个不存在的 clsid 并查看使用 procmon 代表您生成了多少 kernel32!)。

所以除非你有一个非常具体的用例,听起来你没有,否则它不会更快

【讨论】:

    【解决方案2】:

    谈论 32 位和 64 位软件意味着开发此类软件是为了利用具有 32 位或 64 位寄存器大小的 CPU。

    寄存器是内存的一小部分(不是 RAM),由处理单元直接用于临时保存操作结果(变量种类),例如当两个数字相加时,ALU 从两个寄存器中读取,执行运算并将答案写入另一个寄存器。这些寄存器越大,它可以处理的值就越大。 32 位处理器的寄存器可以处理高达 32 位大小的值,而 64 位处理器可以处理比 32 位处理器大一倍的数字,这 结果是 2^32 个值。

    32 位操作系统是在具有 32 位 CPU 寄存器的机器上执行 CPU 操作的操作系统; 64 位操作系统在 64 位处理器上运行良好,但不适用于 32 位处理器,因为它们的寄存器对于此类操作系统来说太小了。

    当程序在操作系统上运行时,32 位应用程序将在 64 位操作系统上运行(嗯,大多数情况下),尽管它们只使用所需的任何 CPU 寄存器的一半,这仅仅是因为程序是设计的不要处理大于 2^32 位的值:这意味着在 64 位操作系统上运行的 32 位应用程序将运行而不会获得任何特定的性能改进。同样,64 位应用程序永远不会在 32 位操作系统上运行,因为它需要的资源比实际可用的资源多。

    希望我足够清楚和正确,我几年前研究过处理器架构......

    【讨论】:

      【解决方案3】:

      这适用于 x86/x86_64 上的 64 位应用:

      • 64 位系统将消耗更多 RAM,最重要的是缓存,因为指针更大。如果指针很多,这可能会成为性能瓶颈。
      • 64 位系统将为您提供两倍多的寄存器,两倍大。这使得在寄存器中存储更多变量成为可能,这将提高性能。

      因此选择可能取决于您决定对哪个应用程序进行基准测试。

      【讨论】:

        猜你喜欢
        • 2012-09-01
        • 2011-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 1970-01-01
        • 2013-10-31
        • 2013-08-29
        • 2011-07-06
        相关资源
        最近更新 更多