内存中的数据存放模式(大端/小端)

在内存中有两种数据存放模式,即大端模式小端模式,它们讨论的无非是下面这个问题:

数据的高字节存放在地址的高位还是低位

下面以32bits的数据32’h01234567为例

  • 大端模式:数据高字节(MSB)应该存放在低地址,这和我们的阅读习惯一致。
低地址 -----> 高地址
0x01 | 0x23 | 0x45 | 0x67   从低到高读
  • 小端模式:数据低字节(LSB)才应该存放在低地址,这将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
低地址 -----> 高地址
0x67 | 0x45 | 0x23 | 0x01  从高到低读

大小端的使用状况

  • Intel的80x86系列芯片是唯一还在坚持使用小端的芯片,ARM芯片默认采用小端,但可以切换为大端;而MIPS等芯片要么采用全部大端的方式储存,要么提供选项支持大端——可以在大小端之间切换。另外,对于大小端的处理也和编译器的实现有关,在C语言中,默认是小端(但在一些对于单片机的实现中却是基于大端,比如Keil 51C),Java是平台无关的,默认是大端。在网络上传输数据普遍采用的都是大端。
  • 网络协议规定接收到的第一个字节是高字节存放低地址,或说TCP/IP协议规定把接收到的第一个字节当做高位看待,这就要求发送端发送的第一个字节是高字节

大小端各自的优劣

  • 大端模式:符号位在所表示的数据的内容的第一个字节中,便于快速判断数据的正负和大小

  • 小端模式:低地址放低字节,所以在强制转换时不需要调整字节的内容;CPU做数值运算时从内存中依次从低到高取数据进行运算直到最后刷新最高位的符号位,这样运算方式会更高效。

参考文献:

Joseph Yiu著,吴常玉、曹孟娟、王丽红译.ARM Cortex-M3与Cortex-M4权威指南(第3版).北京:清华大学出版社,2015:6.5 存储器的端 140-142
https://zhuanlan.zhihu.com/p/97821726
https://blog.csdn.net/tianjing0805/article/details/80048995

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值