【问题标题】:is it possible to run 64 bit code in a machine with 32 bit processor?是否可以在具有 32 位处理器的机器上运行 64 位代码?
【发布时间】:2014-02-01 16:36:22
【问题描述】:

我四处寻找这些问题的答案。但运气不佳。

  1. 是否可以在带有64-bit processor 的机器上运行32-bit 代码?

    答案似乎是肯定的。但在性能问题上存在争议,因为32-bits 在处理器上未被使用。

  2. 现在我的问题是反之亦然,是否可以在具有32-bit 处理器的机器上运行64-bit 代码?

    据我所知,答案是否定的,因为代码设计为在64-bit 上运行 将使用64-process registars,但32-bit 机器只提供32 个。

另一方面,我找到了this link。据此,可以在 32 位机器上编译 64 位代码。但我不清楚这是如何完成的,而且如果在32-bit 机器上编译也将保证 execution 相同。

感谢您的帮助

【问题讨论】:

  • "据此,可以在 32 位机器上编译 64 位代码。" - 是的,这完全有可能。这称为交叉编译。但这与 32 位机器可以运行什么代码/可执行文件无关。
  • 学究式地说:32位和64位机器都是图灵机。所以他们可以互相模仿......
  • @Mysticial:这到底是什么意思?不清楚你在这里的意思..
  • @user1988876 QEMU 可以在 32 位主机架构上模拟 64 位处理器 - 请参阅 stackoverflow.com/a/56332/2864740(但很少有最终用户可能愿意运行并行操作系统)

标签: c compilation 32-bit cpu-registers processor


【解决方案1】:

是否可以在具有 64 位处理器的机器上运行 32 位代码?

是的。例如,这是在 Windows 中通过WOW64 处理的。

现在我的问题是反之亦然,是否可以在具有 32 位处理器的机器上运行 64 位代码?

没有。 64 位代码需要 64 位指令集,这在 32 位处理器上不可用。

据此,可以在 32 位机器上编译 64 位代码。

您可以编译其他架构的代码,但不能执行它。这使您可以为与当前执行平台不同的平台构建代码,但执行它将不起作用。

【讨论】:

  • 太棒了!但最后一部分将保证write once, run anywhere 而不是write once, compile anywhere
  • @user1988876 如果您正在考虑 Java(或其他“托管”风格的语言),您可以编译成一个中间工具集,然后它可以在“任何地方”执行(使用适当的执行平台) - 在 Java 的情况下,你编译成 java 字节码,它可以在任何 JVM 上运行(理论上)。
  • @user1988876 我也无法通过模拟器执行:en.wikipedia.org/wiki/Emulator 不过,我怀疑这不是你想要的。
  • 可以说,我在 32 位计算机上为 32 位机器和 64 位机器编译代码。我可以将此编译后的代码发送到外部世界。那些拥有 32 位 PC 的人下载 32 位可执行文件,而其他人则下载 64 位可执行文件。所以在这里,write Once, run anywhere 可以完成..我在这里的理解有什么不正确的吗?
  • @user1988876 是的,这是可能的(尽管运送 未经测试的代码将是不道德的 IMO)
猜你喜欢
  • 2015-06-20
  • 2013-02-23
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2011-01-30
  • 2010-09-08
  • 2011-01-14
  • 1970-01-01
相关资源
最近更新 更多