在 64 位 Windows 上安装 32 位或 64 位应用程序有啥区别?
Posted
技术标签:
【中文标题】在 64 位 Windows 上安装 32 位或 64 位应用程序有啥区别?【英文标题】:What's the difference between installing 32bit or 64bit apps on a 64bit Windows?在 64 位 Windows 上安装 32 位或 64 位应用程序有什么区别? 【发布时间】:2011-05-03 22:27:01 【问题描述】:显然,您可以在 64 位 Windows 系统(Vista 或 7)上安装 32 位和 64 位编译的应用程序。
两个版本都可以在 64 位操作系统上运行的原因是什么?在 64 位操作系统上安装 64 位应用程序是一种好习惯吗?将 32 位应用程序与 64 位操作系统相结合有什么优点/缺点?
谢谢!
【问题讨论】:
【参考方案1】:根据实际实现,32 位应用程序需要一些特殊处理才能在 64 位操作系统上运行,而 64 位应用程序将在 64 位操作系统上“本地”运行,因此应该“更好”运行(例如“更好”的各种值 - 例如访问更多内存)。这种“特殊处理”可能只是运行指令集的一个子集,但它需要编组等。
因此,在可用的情况下安装 64 位版本的程序是有意义的。
但是,允许 32 位程序运行具有商业意义,因为 32 位应用程序远多于 64 位应用程序。随着时间的推移,仍在销售的应用程序将被升级,并且未来版本的 Windows 可能会不支持 32 位程序(与 16 位程序一样)。
【讨论】:
@Marcelo - 好吧,“仿真”这个词很糟糕。我会看看我能不能想出更好的东西。【参考方案2】:两个版本都可以在 64 位操作系统上运行的原因是什么?
如果操作系统无法运行任何旧的(32 位)应用程序,那么没有人愿意使用它。所以他们必须想办法。
在 64 位操作系统上安装 64 位应用程序是一种好习惯吗?
通常是的,它们可以使用更多内存并且运行速度可能会更快一些。但是,64 位应用程序无法调用 32 位 DLL,因此您可能会遇到问题。
将 32 位应用程序与 64 位操作系统相结合有什么优点/缺点?
并非如此,当然它们不能使用超过 4GB 的 RAM,并且运行速度可能比在相同硬件上的 32 位操作系统上运行得慢一些。
【讨论】:
谢谢迈克尔!因此,例如,如果您的计算机上安装了 64 位版本的 Outlook,并且它将从我的(32 位)应用程序中读取 32 位 DLL,那么它可能会触发一些错误...?另外,在64位系统上编译应用程序时,是否也将所有要编译的DLL编译为64位? @Andrei:是的,那行不通。您不能在同一个操作系统进程中混合 64 位和 32 位代码。所以如果你为 64 位操作系统编译你的应用程序,你也必须为 DLL 这样做,我希望 IDE 能做到这一点。 如果您安装了 32 位版本的 Outlook,并且您从我的应用程序中使用了 64 位编译的 DLL,会不会出现同样的问题?【参考方案3】:使用 x64 等架构的现代处理器可以执行 32 位和 64 位应用程序。
32 位操作系统只能分配 4GB 内存 (2^32 = 4294967296),而 64 位操作系统可以分配更多 (2^64 = 18446744073709551616)。
最好在 64 位操作系统上安装 64 位应用程序,因为如果您的内存超过 4GB,它们将能够使用您计算机的所有内存。
【讨论】:
【参考方案4】:64 位版本的 Windows 附带一个 Windows on Windows 64 (WOW64) 子系统,允许它运行 32 位应用程序。整个过程实际上非常复杂,您可以在以下位置阅读:
How Windows 7 / Vista 64 Support 32 Bit Applications
如果您有 64 位操作系统并且应用程序供应商提供 64 位版本,请安装它。如果没有,安装 32 位版本不会有什么坏处。
能够在同一台机器上组合 32 位和 64 位应用程序具有明显的优势,因为并非所有供应商都提供其应用程序的 64 位版本。一个允许您同时运行这两者的操作系统将使您能够访问消费者可用的更广泛的软件集。
【讨论】:
【参考方案5】:并非每个程序都提供 64 位版本。
是的,您通常应该尽可能使用 64 位应用程序。
结合 32 位和 64 位应用程序很痛苦,而且绝不是一个好主意。它通常只在必要时完成(回到我的第一点)。
【讨论】:
@0xA3:那句话的真实性会随着时间而改变。根据您自己的经验,您当然可能不同意,但现在我发现几乎没有理由支持 64 位版本的应用程序的 32 位版本。 我看到的除了兼容性和可能的迁移成本之外的主要原因是,由于指针大小增加和对齐/填充不同,64 位应用程序需要更多内存来存储相同数量的数据。这可能会影响处理器缓存利用率,请参阅en.wikipedia.org/wiki/64-bit#Pros_and_cons。所以我的观点是,64 位是否真正有意义取决于您的应用程序。 @0xA3:对于大多数类别的应用程序来说,额外的内存可以忽略不计。我只能重申我的最后一点:这些天来,它几乎不重要了。以上是关于在 64 位 Windows 上安装 32 位或 64 位应用程序有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据目标机器(32 位或 64 位)有条件地使用 WiX 安装文件?