暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每个程序员都应该知道的:为什么要分大端存储和小端存储?

IT周瑜 2024-09-20
96

一个int类型数字占四个字节,比如数字8对应的四个字节以十六进制表示为:00 00 00 08,其中08是四个字节中的最低位字节,最左边的00是四个字节中的最高位字节。

一块内存空间,假如从左往右是低地址到高地址

所谓大端存储就是:高位字节在低地址,低位字节在高地址,也就是以下存储方式,比较符合人类的习惯

所谓小端存储就是:低位字节在低地址,高位字节在高地址,也就是以下存储方式,比较符合机器的习惯

大端小端其实各有优势,在MySQL中,MySQL用的是小端存储,InnoDB用的是大端存储,所以MySQL需要把数字从小端格式转成大端格式,注意下图中的for循环

大端存储的好处是适合比较大小,甚至不用取出完整的四个字节就能比较大小了,比如数字8和1024用大端存储,那么从低地址到高地址的字节序就是:

  • 00 00 00 08
  • 00 00 04 00

要比较这两个数字的大小,可以逐个按字节来进行比较,先取第一个字节,相等,取第二个字节,相等,取第三个字节,04大于00,可以直接判断出1024大于8,而不用取第四个字节了。

反之,如果采用的小端存储:

  • 08 00 00 00
  • 00 04 00 00

只能把完整的四个字节都取出来才能比较大小。

小端存储的好处是适合做类型转换,比如数字8采用小端存储,那么int类型和short类型对应的字节序为:

  1. int类型的8:08 00 00 00
  2. short类型的8:08 00

因此int类型转short类型只需要取int类型的前两个字节就可以了,后两个字节直接可以不需要了。

反之,如果采用的是大端存储:

  1. int类型的8:00 00 00 08
  2. short类型的8:00 08

就需要取出int类型的全部四个字节之后,才能取出最后两个字节得到short类型的值。

以上就是我对大端存储和小端存储的理解,你学到了吗?

最后,介绍一下我和我的新课,我研究过Spring、SpringBoot、Spring Cloud、RabbitMQ、Tomcat、Dubbo、Zookeeper、JVM、Linux、SpringAI、LangChain、MetaGPT、GraphRAG...等源码。

近期MySQL源码也被我拿下了,对应的《Java手写MySQL+MySQL源码解析》课程马上就要开课了,MySQL是一个程序员最应该学好的技术,是面试跳槽的必问重点,是成为架构师和技术专家必须突破的瓶颈。

同时我还有多年讲授技术源码课程的经验,知道如何由浅入深把技术难点讲清楚,既懂MySQL源码又能讲清楚的,只有我一个,学源码找周瑜就对了!

课程马上开始,目前处于预售期的最后阶段,仅剩最后10个优惠名额,抓紧机会上车吧

推荐:

学MySQL源码,就是这么简单!

十张图“拿捏”MySQL中B+树的生成过程

MySQL十道必考题,图文并茂,记得收藏!

五种情况,不加GAP锁,只加行锁

文章转载自IT周瑜,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论