将 Cygwin x86 升级到 x64(32 位与 64 位 Cygwin)

Gen*_*sky 8 cygwin

我是 Cygwin 的长期用户。我运行的是 Win7/x64,但我的 Cygwin 安装是 32 位的。在我安装它时,64 位版本被认为是实验性的。现在 Cygwin 网站在其网站上列出了 32 位和 64 位版本,但没有特别提及或推荐使用哪个版本。

作为一名程序员,我的经验是:除非专门为 64 位 CPU 的功能而设计,否则很少有应用程序可以通过为 64 位 CPU 重新编译而获得任何收益。不过,它们可能会使用更多内存,因为每个内存指针现在使用 8 个字节而不是 4 个字节。

所以,我的问题是:选择 64 位 Cygwin 比选择 32 位 Cygwin 有什么好处吗?我应该迟早升级我的 32 位安装吗?

非常欢迎常见使用模式(例如运行常见 UNIX 命令、特定 shell 脚本等)的性能/内存基准测试结果。

如果您已将 32 位 Cygwin 升级到 64 位,请讲述您的故事 - 升级了吗?它值得吗?

Ant*_*ica 7

在工作中运行 32 位 Cygwin 多年后,我最近升级到 64 位。这非常轻松,因为您可以并排运行这两个安装。对我来说,虽然我没有运行任何基准测试,但性能没有明显差异。升级对我来说最大的收获是从全新安装开始,没有任何过去几年积累的麻烦。

我在运行 32 位 Cygwin 时遇到的一个缺点是WoW64 子系统文件系统重定向器会静默重定向 32 位应用程序。这导致ls /cygdrive/c/Windows/System32/在 32 位 Cygwin 中运行实际上并不显示 的内容%WINDIR%\System32,而是显示%WINDIR%\SysWOW64. 尝试访问目录中的%WINDIR%\System32文件,例如,ls /cygdrive/c/Windows/System32/nbtstat.exe失败并显示错误消息:

ls: cannot access /cygdrive/c/Windows/System32/nbtstat.exe: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这意味着,安装在Windows命令%WINDIR%\System32nbtstatdnscmd不适,而无需修改PATH。访问 64 位 Windows 文件的变通方法是必须使用%SystemRoot%\sysnative伪目录,例如,要运行nbtstat命令,请使用/cygdrive/c/Windows/Sysnative/nbtstat.

64 位 Windows 上的 32 位应用程序

WoW64(Windows 64 位上的 Windows 32 位)是一个能够运行 32 位应用程序的子系统。它包含在所有 64 位版本的 Windows 中,并创建一个 32 位环境以在 64 位系统上运行未经修改的 32 位应用程序,使用 DLL 提供必要的接口。

Windows 使用该%SystemRoot%\system32目录存放其 64 位库和可执行文件。这样做是出于向后兼容性的原因,因为许多遗留应用程序被硬编码为使用该路径。在执行 32 位应用程序时,WoW64 透明地将 32 位 DLL 重定向到SystemRoot%\SysWoW64,其中包含 32 位库和可执行文件。

32 位应用程序通常不知道它们在 64 位操作系统上运行。32 位应用程序可以%SystemRoot%\System32通过伪目录访问%SystemRoot%\sysnative

对于 64 位应用程序(例如 Windows 命令提示符、cmd.exe),没有文件系统重定向:

另请参阅:文件系统重定向

  • 此外,与 32 位相比,64 位上的分叉故障极为罕见 (3认同)
  • 现在我已经回答了这个问题,我觉得它更适合超级用户。 (2认同)