这个谁好谁不好应该是没有定论的。主要就是计算机早期设计者们的选择。字节序”是个什么鬼?
(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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。