【问题标题】:endian-ness of new macs - are all pc platforms the same now?新 Mac 的字节序 - 现在所有的 pc 平台都一样吗?
【发布时间】:2010-09-10 10:01:16
【问题描述】:

Mac 改用英特尔芯片是否意味着我们已经完成了在二进制资源中为跨平台数据分发而处理数字的问题?

这是最后一个问题还是我不​​知道的其他平台?

【问题讨论】:

    标签: macos endianness


    【解决方案1】:

    您似乎忘记了字节序超越了处理器架构。有很多算法和协议需要特定的字节顺序。例如,我花了两周时间试图让一个 MD5 散列算法工作,只是意识到我假设了网络字节顺序(Big Endian),而 Ronald Rivest 假设(在 RFC 中没有说明)实现者会使用 Little Endian 字节顺序。

    【讨论】:

    • 实际上,RFC 1321 煞费苦心地阐明了字节顺序(“每个连续的四个字节组被解释为一个单词,首先给出低位(最低有效)字节”)。我希望你没有伤害他!
    • 暂且不说您是在回复十多年前的评论,我认为您和我对“煞费苦心”这个词的定义不同。在我的印象中,“煞费苦心”就是在详细地经历一个主题。避免使用术语“endian”的文档开头不是一个松散的定义。 ;-)
    • @64BitBob 你的意思是当你在 2008 年发表评论时,RFC 没有提到字节序?
    【解决方案2】:

    现在,一个人的主计算机比以往任何时候都不太可能是运行通用操作系统的台式计算机。尽管这仍然很常见,但许多其他人正在使用专门构建的智能手机或 umpc 设备,即用于浏览网络。这些平台不一定有 x86 cpu。更常见的是,尤其是智能手机设备,他们使用的是大端的 ARM 内核。

    【讨论】:

      【解决方案3】:

      我在想同样的问题:既然 Mac 现在是英特尔,那么字节序问题就死了吗?没有。除了某些超级计算机(让我们面对现实,我们这些外行人永远不必处理)之外,还有一个使用大端顺序的主要领域:网络协议,尤其是:互联网协议(如:TCP/IP 的“IP”)。

      【讨论】:

        【解决方案4】:

        嗯,实际上还有很多大端 CPU 剩余。

        其实PPC并没有死。您知道,Xbox360 使用 PPC CPU(这是一个很好的例子,这些 CPU 并不像它们的声誉那么糟糕 - Xbox360 一点也不慢)。好吧,这台可能不算PC。

        但是服务器算作 PC 吗?仍然有很多服务器使用 Sun 的 UltraSparc CPU,通常是大端,尽管最新的型号可以是大端或小端。有许多 CPU 可以是一个或另一个(例如 ARM,仍然用于许多设备,如手机等),因为支持两者为硬件和软件供应商增加了最大的灵活性。甚至 IA64 CPU(Intanium,在 AMD 发明 x86-64 之前旨在取代 x86,它是真正的 64 位并且只能模拟 32 位,不像 x86-64 可以两者兼而有之)是 CPU 之一切换到大端。可以同时使用的 CPU 称为双端。

        实际上,如果您暂时忽略英特尔(和兼容的 CPU),那么市场上的大多数 CPU 要么是大端或至少是双端,但据我所知,其中大部分并未用于任何消费类 PC。

        但是,我没有像许多程序员那样看到字节序问题。每个现代 CPU 都可以在硬件中交换字节序。实际上,如果您在小端英特尔 CPU 上编写程序,交换从内存读取的每个整数的字节序,并在写回内存时再次交换,这可能会导致性能损失低至 5%;在实践中,您只需要为进出应用程序的数据交换字节顺序,因为在您的应用程序中,字节顺序当然是恒定的。

        另请注意: 我知道的几乎所有网络协议都将字节顺序指定为大端,TCP/IP 是最熟悉的系列。因此,如果您在较低的网络层上工作,您将始终需要继续交换字节。

        【讨论】:

        • 我从未见过 IA64 在大端模式下运行。它不是双端的,只是有点好奇。
        • 仅供参考,Xbox 360 正在以小端模式运行其 PPC CPU。
        【解决方案5】:

        讨厌的 x86 用它们的段指针弄脏了我的内存寄存器! ;)

        假设您要避免与 PowerPC 的向后兼容性,我相信您不再需要在 PC 和 Mac 之间来回切换。

        【讨论】:

          【解决方案6】:

          定义PC,你认为PC是什么?

          我目前正在从运行在 arm 9 处理器上的 Linux 发行版中键入此内容,可以将其设置为不同的字节序,但默认值为大字节序。 Intel、AMD 和 Via(x86 兼容)使用 Little endian。

          字节序不会很快消失,无论何时您通过网络传输任何内容,您都必须确保它采用正确的字节序,因为 Internet 协议指定的字节序实际上是大字节序。

          请参阅Wikipedia article on Endianness 了解更多信息。

          【讨论】:

            【解决方案7】:

            这当然不是这个问题的最后一个问题,特别是如果您正在为嵌入式系统编写,包括掌上电脑等。MIPS、ARM 和其他架构支持双端架构,可以在系统启动时选择它们的字节序向上。

            如果您编写的代码依赖于字节顺序,则需要注意字节序。不要指望这个“问题”会很快消失。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-21
              • 1970-01-01
              • 2013-12-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多