为什么条件字节顺序不好?

时间:2015-04-30 17:37:36

标签: endianness

Linus声称 [1 2] 条件字节顺序比愚蠢更糟糕。

首先我想到的是ZFS,但肯定还有其他例子。

他写道:

  

唯一合理的模型是指定一个固定的字节顺序。认真。   它同样具有可移植性,可以生成更好的代码 - 甚至可以   然后必须无条件地执行字节顺序交换的体系结构    - 并且添加静态类型检查等更简单。这是字面上的   执行“bswap”指令比执行a更少的代码和更快   某些变量的条件测试(即使你可以避免使用   动态bswap)

我认为条件字节顺序可能会生成更长的代码,但在使用相同字节顺序的机器上应该更快。似乎他的大多数观点都是关于代码的美学。我不是专家,所以我希望看到更详细的解释。

1 个答案:

答案 0 :(得分:3)

你要求解释Linus的说法。你错误地认为他们是关于美学的。

当Linus说“[固定字节顺序]产生更好的代码”时,他主要讨论的是更好(即更快)的机器代码

当他说“添加静态类型检查等更简单”时他可能正在谈论C源代码,但这不是美学问题。更简单的代码更容易理解,更易于维护,并且具有更少的错误表面区域。通常(但不总是)它也会生成更好的机器代码。

当他说“做一个'bswap'指令要比对一些变量进行条件测试更快”时,他又在谈论机器代码,基本上说能够拥有数据如果您不能依赖对数据进行本地排序,那么按原生顺序,您在性能方面没有好处。他声称,更好的是能够依赖于错误顺序的数据,而不是在使用它之前测试它的顺序。

Linus争辩说,即使协议选择的字节顺序与机器的本机字节顺序不同,上述所有内容都适用。在该对话的其他地方,他和其他人观察到即使数据不是本机字节顺序,也可能在其上执行许多操作而不关心字节顺序。此外,如果您事先知道字节顺序是什么,那么对于某些其他操作,可以在编译时以避免运行时字节交换的方式调整该顺序。

Linus的论点令人信服。