大端存储和小端存储的区别

最近碰到一道多益的笔试题:大端存储与小端存储的区别。当时不知道,瞬间懵了。先收集了下资料,最后我在文章中给出我的答案。

一、来源

       端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian(这句话最为形象)。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。(敲开鸡蛋的方式

二、存储模式

小端:较高的有效字节存储在较高的存储器地址,较低的有效字节存储在较低的存储器地址。(小存小)
大端:较高的有效字节存储在较低的存储器地址,较低的有效字节存储在较高的存储器地址。


三、应用差异

      大端排序的好处是接收数据的程序可以优先得到数据的最高位,以便快速反应。(通信协议)
  比如我有一个控制温度的上位机程序,该程序接收大端方式编码的温度信号0x00fe,对比原来的温度值,假设是0x0135。那么在接受第一个字节0x00的时候,上位机就可以判断温度比原来下降了,可以立即发出指令打开加热器。而对于小端排序的方式,上位机只有在接收到完整的两个字节的时候才能做出反应。如果采用串行通信,用只对信号的每一个字节单独校验的话,波特率为9600时,大端编码下,上位机的响应时间为1ms,小端排序方式下,上位机响应时间为2ms。这时,大端编码就比小端排序更快。如果需要对完整的通信包进行校验,则没有区别。
  在串行通信测试程序中,计算机显示的字节顺序一般就是接收顺序。如果用大端编码的话,测试程序直接就可以显示出从大到小排列好的数据。而小端排序的方向相反,可视性不好,容易看花眼掉。

  结论是:1、串行通信(包括以太网、WIFI、串口、USB等)如果采用大端编码有时会使系统响应更快。2、串行通信采用大端编码有利于调试。

        小端计算精度便于确认。(cpu)

  小端排序下,选定一个数据的起点后,只需要重复进位加法就可以实现高精度加法计算。减法也是一样。数组的第0位固定是最低位。而大端方式下,如果高精度计算的精度可变,就很难确定数组的第0位到底代表多大。不同精度的计算还会产生数据对齐问题。比如早期的16位CPU中,int类型和long类型做加法,用小端排序就很容易从指针位置开始计算。而大端排序则非常复杂。加法运算是非常常用的运算,其性能直接影响程序的整体性能。所以CPU中要采用性能较好的小端排序。
  由于CPU本身是小端排序,如果内存和文件也采用小端排序的话,就可以把文件中的数据直接存储到内存中,再直接把内存中的数据存储到CPU的寄存器。这样不仅提高计算机的性能,程序也变得简单。

  结论是:所有直接与硬件有关的代码都适合按小端排序。

参考文章

https://zhidao.baidu.com/question/540479710.html

https://blog.csdn.net/favory/article/details/4441361

https://www.cnblogs.com/fuchongjundream/p/3914770.html

--------------------------------------------------------------------------------------------------------------------------------------------------

个人认为,cpu的主要目的是便于计算,在速度和精度上肯定优先小端了;而网络传输重视报文校验,选大端肯定会校验的快。

答案:

        1、来源  敲鸡蛋  分敲尖头(小)和圆(大)头,引发存储顺序之争

        2、就是文章第二点

        3、大端先取高位数据,方便校验,常在网络通信协议中做网络字节序   小端精度高,比大端计算速度快,常用作cpu的设计


  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值