14

将 mac 换成 Intel 芯片是否意味着我们已经完成了在二进制资源中为跨平台数据分布处理数字的问题?

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

4

7 回答 7

10

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

于 2008-09-17T21:50:01.410 回答
9

好吧,实际上还有很多大端 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 是最熟悉的系列。因此,如果您在较低的网络层上工作,您将始终需要继续交换字节。

于 2008-09-17T21:51:01.517 回答
5

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

于 2009-07-19T00:53:21.507 回答
4

这肯定不是这个问题的最后一个问题,特别是如果您正在为嵌入式系统(包括 Pocket PC 等)编写代码。MIPS、ARM 和其他架构支持双端架构,它们可以在系统启动时选择它们的字节序。

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

于 2008-09-17T21:41:40.990 回答
2

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

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

于 2008-09-17T21:50:50.003 回答
1

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

于 2009-07-19T01:08:01.683 回答
0

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

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

字节序不会很快消失,任何时候你通过网络传输任何东西,你都必须确保它是正确的字节序,因为互联网协议指定的字节序实际上是大字节序。

有关更多信息,请参阅有关字节顺序的Wikipedia 文章

于 2008-09-17T21:49:20.443 回答