gpt4 book ai didi

endianness - 字节序背后的原因?

转载 作者:行者123 更新时间:2023-12-03 10:28:05 25 4
gpt4 key购买 nike

所以,我想知道,为什么有些架构使用小端而其他架构使用大端。我记得我在某处读到它与性能有关,但是,我不明白字节顺序如何影响它。我也知道:
The little-endian system has the property that the same value can be read from memory at different lengths without using different addresses.
这似乎是一个不错的功能,但即便如此,许多系统还是使用大端,这可能意味着大端也有一些优势(如果是,是哪个?)。

我敢肯定还有更多内容,最有可能深入到硬件级别。很想知道详情。

最佳答案

我在网上查看了一些关于这个问题的更多信息,有很多答案和理由来解释为什么大端或小端排序可能更可取。我会尽力在这里解释我的发现:

小端

小端字节序的明显优势是您在问题中已经提到的……事实上,可以将给定数字读取为来自同一内存地址的不同位数的数字。正如维基百科关于该主题的文章所述:

Although this little-endian property is rarely used directly by high-level programmers, it is often employed by code optimizers as well as by assembly language programmers.



因此,涉及多个精度的数学函数更容易编写,因为字节重要性始终对应于内存地址,而对于大端数字则并非如此。这似乎是一次又一次引用小端序的论点......由于它的普遍性,我不得不假设这种排序的好处是相对显着的。

我发现的另一个有趣的解释是关于加法和减法。在添加或减去多字节数字时,必须首先获取最低有效字节,以查看是否有遗留到更高有效字节的情况。由于最低有效字节首先以小端数读取,因此系统可以在获取后续字节的同时并行化并开始计算该字节。

大端

回到维基百科文章,大端数的所述优点是可以更容易地估计数字的大小,因为最重要的数字在前。与这个事实相关的是,通过简单地检查最低字节中偏移量 0 处的位,很容易判断一个数字是正数还是负数。

在讨论 big-endianness 的好处时还指出,二进制数字的排序与大多数人订购 base-10 数字一样。当从二进制转换为十进制时,这在性能方面是有利的。

虽然所有这些论点都很有趣(至少我认为是这样),但它们对现代处理器的适用性是另一回事。特别是,加法/减法参数在 8 位系统上最有效......

在我看来,小字节序似乎最有意义,并且在查看所有使用它的设备时是最常见的。我认为仍然使用 big-endianness 的原因更多是出于遗产原因而不是性能原因。或许某个特定架构的设计者曾一度认为大端优先优于小端,并且随着架构多年来的发展,端序保持不变。

我在这里画的平行线是 JPEG(大端)。 JPEG 是大端格式,尽管事实上所有使用它的机器都是小端格式。虽然有人可能会问 JPEG 作为大端字节序有什么好处,但我敢说,就所有意图和目的而言,上面提到的性能参数并没有产生任何影响。事实是 JPEG 就是这样设计的,只要它一直在使用,它就会一直这样。

关于endianness - 字节序背后的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13926760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com