所以,我想知道为什么有些架构使用little-endian和其他big-endian.我记得我在某处看过它与性能有关,但是,我不明白字节序会如何影响它.我也知道:
The little-endian system has the property that the same value can be read from memory at different lengths without using different addresses.
这似乎是一个很好的功能,但是,即便如此,许多系统都使用big-endian,这可能意味着big-endian也有一些优势(如果是这样,哪个?).
我相信还有更多,最有可能深入到硬件水平.很想知道细节.
Lev*_*lho 26
我已经在网上看了一下这个问题的更多信息,并且有很多答案和推理可以解释为什么大或小的字节顺序可能是首选的.我会尽力在这里解释一下我找到的东西:
little-endianness的明显优势在于你在问题中已经提到过的事实......给定数字可以从同一个存储器地址读取为多个不同位数的事实.正如维基百科关于该主题的文章所述:
虽然这种little-endian属性很少被高级程序员直接使用,但它通常由代码优化器和汇编语言程序员使用.
因此,涉及多个精度的数学函数更容易编写,因为字节重要性总是对应于内存地址,而对于大端数字则不是这种情况.这似乎是一遍又一遍引用的小端的论点......由于它的普遍性,我不得不假设这种排序的好处是相对重要的.
我发现另一个有趣的解释是加法和减法.在添加或减去多字节数时,必须首先获取最低有效字节,以查看是否存在更重要字节的残留.由于首先以小端数字读取最低有效字节,因此系统可以在获取后续字节时并行化并开始计算该字节.
回到维基百科的文章,大端数字的优势在于,数字的大小可以更容易估计,因为最重要的数字首先出现.与此事实相关的是,通过简单地检查最低位字节中的偏移0处的位来判断数字是正还是负是简单的.
在讨论big-endianness的好处时还说明了二进制数字的排序是因为大多数人订购的基数为10位数.当从二进制转换为十进制时,这在性能方面是有利的.
虽然所有这些论点都很有趣(至少我认为是这样),但它们对现代处理器的适用性是另一回事.特别是,加法/减法参数在8位系统上最有效......
对于我的钱,小端看起来似乎是最有意义的,并且在查看使用它的所有设备时是迄今为止最常见的.我认为仍然使用big-endianness的原因更多是出于遗留原因而非性能原因.也许有一段时间,给定体系结构的设计者认为big-endianness是优选的小端,并且随着多年来架构的发展,字节序保持不变.
我在这里绘制的并行是JPEG(大端).JPEG是大端格式,尽管几乎所有使用它的机器都是小端的.虽然人们可以问JPEG是大端的有什么好处,但我会冒昧地说,出于所有意图和目的,上面提到的性能论点并没有产生差别.事实上,JPEG是按照这种方式设计的,只要它仍在使用中,它就会保持原样.
| 归档时间: |
|
| 查看次数: |
6649 次 |
| 最近记录: |