大端存储和小端存储各有什么优势?

这个谁好谁不好应该是没有定论的。主要就是计算机早期设计者们的选择。字节序”是个什么鬼?

(java默认使用大端存储) 

不过由于X86是小端,大家上学时候学计算机原里大多也是学的小端,一些大佬坚持自己的观点,arm,power,mips早期都坚持大端,但是也许是为了怕作死,也做了小端。

小端的好处是学计算机原里的时候大多都学的这个,而且无论大端小端的cpu,1个字节内的顺序都是小端,比较符合一般初学者思维惯性。

大端的好处是网络通信的TCP/IP协议中字节序就是按照大端规定的。x86的cpu处理所有网络数据包时都要先将数字进行字节序反转才能进行运算,发送时也要先反转才能发送,增加了一点计算开销。如果你是大尾cpu就不需要反转了。

最坏的情况是,现实中者两种字节序我们都必然要用到。

关于性能的一些思考

  • 在一些情况下,比如b-tree,tire tree等从一端开始逐bit运算的算法中,根据数据的离散情况不同,字节序会很大程度影响运算速度。
  • 还有一种情况就是IO序和内序如果不同,每次读取IO数据都要反转,写入IO都要再反转,也会增加开销。这就要看存储协议和运算程序的配合了,如果相同最快,如果不同就要反转,会变慢。比如如果你的程序主要就是处理网络基础数据包,大端肯定有优势。

  • 还有一种情况就是原子操作,在一些极端追求性能的特殊情况中,原子操作非常重要,如果运算结果需要反转就破坏了原子性,当然这跟具体程序有关,到底大端要转还是小端药转不好说。

上面说的三种情况问题基本都是面对差异的问题,不是哪个好的问题,最坏的情况就是有两种端的情况。

总之现实就是两种字节序都有,X86小尾无法改变,网络通信大尾也无法改变,UTF编码也有麻烦的大端小端的标记符,这个世界总是有大佬喜欢定规矩,也总是有后来者要改变规矩,对于我们没资格定规矩也没能力改规矩的人只能老老实实用就是了。

相关:大端存储和小端存储

作者:开心小小喵
链接:https://www.zhihu.com/question/275738523/answer/382407340
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值