不同类型 - 不同的字节序?

6
我正在处理一些比较老的代码,该代码测试了像shortintlonglong long等类型的字节序。 是否还有使用中的系统实际上针对不同类型(由于这些类型的不同大小)具有不同的字节序? 我所知道的唯一例子是PDP-11,其中32位值的两个16位半部分以“大端序”存储,而这些16位中的每个8位半部分则以“小端序”存储。
鉴于上述测试中存在未定义行为,我可能需要重写部分代码,并想知道是否值得保留此复杂性。我知道(以及如何)编写与系统字节序无关的代码,但这将需要进行许多更改,而我目前没有时间进行这些更改。

有没有我应该/可以添加的标签?“历史”相关但不太宽泛? - Daniel Jour
2
我会看一下你预测代码将在未来5年内移植到的系统。很有可能你会发现,与PDP-11关于long字节顺序的混乱相比,没有现代系统是如此无政府状态。就个人而言,除非当前运行代码的系统存在混合字节顺序,否则我不会担心混合字节顺序。虽然通常有通过序列化函数系统地处理大端和小端的方法,但你可能需要担心大端和小端之间的区别。 - Jonathan Leffler
2
一个更近期的案例是早期ARM处理器的几个过时浮点协处理器之一,它们使用与主处理器相反的字节序——因此floatdouble是大端字节序,而int等则是小端字节序。(我模糊地记得这是因为协处理器是一个几乎未修改的MC68881,设计用于与整个68020系列兼容,而该系列始终采用大端字节序。) 顺便提一下,“更近期”的意思是指上世纪90年代初。现代ARM内置FPU,对所有内容使用一致的字节序。 - zwol
@JonathanLeffler 很不幸,我甚至(真的)不知道哪些系统目前最受关注,因此在这里预测任何事情都非常困难。似乎旧版本的软件(如果你好奇,是GNU CLISP)仍在“无政府主义”机器上运行,破坏兼容性并不是一个好主意。尽管我发现在代码的其他部分中,所有类型的字节顺序都被假定为相同,所以我想这艘船已经开走了^^ - Daniel Jour
@zwol 是的,这是一个很好的例子(即使不依赖于类型的大小)! - Daniel Jour
显示剩余3条评论
1个回答

2
大端机器仍在使用中,例如数字信号处理器(DSP)中的TI提供了众多示例,以及通用处理器中的Motorola 68000。值得注意的是,在某些DSP和RISC处理器(如ARM和Power)中,字节序可配置,有时在多个级别上。
这里有一个由TI提供的示例,结合了大端和小端处理器的特定功能, "OMAP910 设备"
通用处理器中字节序的历史在以下IEEE文章中描述, "个人电脑中的字节序"
在设计中使用DSP或ARM的原因包括,设备可以针对特定功能进行优化、更具成本效益、需要较少的支持电路或者与通用处理器相比使用更少的功率。OMAP910演示了适用于特定功能的字节序。
开发用于不同字节序平台的代码,通常会根据平台的字节序进行条件编译。如果可配置且相关,则通常明确设置或检测字节序规则。

好的,已经做了相应的修改。ARM和Power当然都是RISC处理器。 - DrM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接