Linux 上如何处理向 64 位的转变

Linux 上如何处理向 64 位的转变

Linux/Unix 上如何过渡到 64 位? Windows 世界似乎仍然存在问题,我很好奇它在 *nix 世界中是如何处理的。

答案1

使内核成为 64 位所需的工作已完成呜呜不久前使用 DEC Alpha 系统。然而,程序是另一回事。

到目前为止,我所看到的普遍共识似乎是:

  • 具有混合二进制文件的系统的单独/lib目录/lib64
  • 编译为 64 位;如果编译失败,请重新编译为 32 位,直到可以清除源代码为 64 位。

除此之外,您真的不会看到混合 32/64 位构建带来的大量“悲伤”。

答案2

Windows 和 *ix 使用不同的数据模型进行转换。这个 UNIX.org有点旧,但它仍然提供了一个很好的权衡概述(请注意,long long后来添加到 C99,并且要求至少为 64 位)。您还可以看到一个维基百科文章关于同一主题。正如 UNIX.org 文章末尾所主张的那样,大多数类 UNIX 系统都采用 LP64,这意味着longlong long和指针都是 64 位的。

Windows 采用所谓的 LLP64 数据模型,这意味着只有long long和 指针是 64 位的。 long仍然是 32 位。部分原因很简单,他们不想仔细检查并修复假定long适合int.

答案3

由于 Linux 发行版大多是开源的,因此已经完成了很大的转换。除非您使用专有软件(例如 Skype),否则您可以运行纯 64 位系统,没有任何缺点。

然而,恕我直言,真正的区别是更专有与开放,然后是unix与windows,因为它通常是首先移植的开源软件(一些志愿者需要重新编译某些东西 - 也许修复一些编译问题) - 或者在大多数情况下不移植一切都只是重新编译;) - 以及最后移植的财产。

另外,在 Linux 上,您可能还有存储库,因此安装会自动处理 - 您无需选择 64 位或 32 位版本(系统会自动选择您的版本)。在 Windows 上下载程序并具有单独的 64 位和 32 位版本:

  • 将服务器上的文件大小加倍
  • 要求用户知道他/她的版本。或者甚至他们在某些方面有所不同

我想这就是 Windows 二进制文件通常是 32 位的原因 - 它是一刀切的,并不是每个人都使用 64 位版本。

答案4

实际上,请尝试 ACM Queue 上的“The Long Road to 64-bits”: http://queue.acm.org/detail.cfm?id=1165766 后来 ACM 通讯部发现了这一消息。第一个 64 位微处理器是 MIPS R4000,于 1992 年第一季度在 SGI Crimson 中发货,Dec Alphas 于当年晚些时候发货。

R4000 最初以 32 位模式运行,后来以 64/32 模式运行,即 64 位操作系统、64 或 32 位用户代码。 Alphas 始终仅以 64 位运行 UNIX(这是一个合理的选择,因为没有 32 位应用程序的安装基础。)

20 世纪 90 年代后期,SGI 为 64 位 Linux(在 Itanium 上运行)做出了贡献,大约在 XFS 移植到 Linux 的时候(它确实需要 64 位)。

相关内容