如何在 Linux 上处理向 64 位的转换

Lou*_*lin 15 64bit history

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

Ave*_*yne 12

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

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

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

除此之外,您真的不会从混合 32/64 位构建中看到很多“悲伤”。


Mat*_*hen 8

Windows 和 *ix 使用不同的数据模型进行转换。这个 UNIX.org页面有点旧,但它仍然提供了一个很好的权衡概述(注意long long后来被添加到 C99,并且要求至少是 64 位)。您还可以查看有关同一主题的维基百科文章。截至UNIX.org文章的末尾主张,大多数类UNIX系统已经走了与LP64,其手段longlong long以及指针均为64位。

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

  • 在 Unix 世界也有很多争论。支持添加“long long”的论据之一是,假设“long”是 32 位的代码太多了。(至少在 C99 标准之前不久我在 comp.std.c 上进行的特定争论中。) (2认同)