新Mac的字节序-现在所有PC平台都一样吗?

时间:2020-03-05 19:00:09  来源:igfitidea点击:

从macs转换为intel芯片是否意味着我们已经完成了二进制资源中数字的跨位数据交换工作?这是问题的最后一个,还是我不知道其他一些平台?

解决方案

回答

这当然不是问题的最后一个,尤其是如果我们正在为嵌入式系统(包括Pocket PC等)编写的时候。MIPS,ARM和其他体系结构支持双向体系结构,可以选择它们在系统启动时的字节序。

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

回答

定义PC,我们认为PC是什么?

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

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

有关更多信息,请参见维基百科上有关字节序的文章。

回答

我们似乎忘记了字节序超越处理器体系结构。有许多算法和协议要求特定的字节顺序。例如,我花了两个星期的时间来尝试使MD5哈希算法起作用,只是意识到我假设网络字节顺序(Big Endian),而Ronald Rivest假定(在RFC中未作说明)假设实现者将使用Little字节序字节顺序。

提醒我有时要伤害那个男人。 :-P

回答

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

我相信,如果我们不考虑与PowerPC的向后兼容性,则我们不再需要在PC和Mac之间相互打扰。

回答

好吧,实际上还有大量的大端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称为双向字节序(bi-endian)。

实际上,如果我们一秒钟忽略英特尔(和兼容的CPU),那么市场上的大多数CPU或者是大端字节序,或者至少是双端字节序,尽管据我所知,其中大多数都没有在任何消费类PC中使用。

但是,我没有像许多程序员那样看到字节序问题。每个现代CPU都可以在硬件中交换字节序。实际上,如果我们要在一个小的字节序的Intel CPU上编写程序,该程序将交换从内存读取的每个整数的字节序,并在回写到内存时再次互换,这可能会导致性能下降多达5%。而且实际上,我们只需要将字节序交换为传入和传出应用程序的数据,因为在应用程序中,字节序当然是恒定的。

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

回答

我当时在想同样的问题:既然Mac现在是Intel,那么endian问题是否已经死了?没有。除了某些超级计算机(让我们面对现实,我们永远不需要面对),还有一个主要领域使用大端顺序:网络协议,尤其是:互联网协议(如: (TCP / IP)。

回答

现在,人们的主计算机比以往任何时候都更可能是运行通用操作系统的台式计算机。尽管这仍然很普遍,但许多其他人正在使用专门用于浏览网络的智能手机或者UPC设备。这些平台不一定需要具有x86 cpus。通常,尤其是在智能手机设备中,它们使用的是大端字节序的ARM内核。