本文共 1307 字,大约阅读时间需要 4 分钟。
计算机内存的存储方式分为大端模式和小端模式,
例如intel x86芯片, 使用的是小端模式,
arm的芯片, 默认使用小端模式, 但可以配置大小端.
mips以前全用大端模式, 现在也可以大小端配置.
1. 如何查看本机 是大端还小端模式,
lscpu, 可查看
2. 何谓大小端
总是记不住, 所以再捋一遍看能记住不...
8位, 16位, 32位数据, 有个字节序
以16位为例, MSB - [15][14][13]...[0] - LSB
MSB: Most Significant Bit - 最高有效位
LSB: Least Significant Bit - 最低有效位
如0x1234 - 左侧最高位, 右侧最低位....
MSB - 0001 0010 0011 0100 - LSB
字节序好理解, 这个是确定的
比如usb setup请求的bmRequestType这个字节
D7: 方向 (0 - OUT, 1 - IN)
D6..5: 类型 (0 - Standard, 1 - Class, 2 - Vendor, 3 - Reserved)
D4..0: Recipient/收件人 (0 - Device, 1 - Interface, 2 - Endpoint, 3 - Other, 4..31 - Reserved)
D0 即 LSB
D7 即 MSB
这个数据在内存中如何存储, 即有个大小端的概念
字节序从左到右 D7 .... D0,
内存0 - 4G内存,
如果内存 地址的顺序 和 字节序一样,
即字节序高位的数据, 存放在内存低地址, 字节序低位的数据, 存放在内存高地址,
这个叫做大端,
即跟人类思维一样, 数据字节序和内存增长方向一致, 叫做大端...
(有人发明了一个叫法, 高尾端, 即人类思维里的尾巴, 即字节序的LSB, 放在高位地址 --- 高尾端)
大端 == 高尾端...
反之, 字节序和内存增长方向相反, 即和人类思维反过来的,
高位数据存放在高地址, 低位数据存放在低地址, 这种叫做小端...
(有人叫他低尾端, 即人类思维里的尾巴在低位地址)
ok, 我也用了很多记忆方法, 实际使用的时候还是会混...
尝试用以下想法再记录下:
* 大部分电脑, x86, arm都是使用小端模式
* 人类和电脑时不一样的...
* 人类看数字的方向一般都是先左后右, 中国人开车司机也是做左边驾驶位,
上厕所...男左女友, 戴婚戒...男左女右,
打麻将...左边是上家, 右边是下家...(逆时针的...)
左青龙, 右白虎,
当然以前对联是先右后左, 横批是右边读起, 门神是右边秦叔宝, 左边尉迟恭...
因为古代写字都是右边打头...
* 不管了, 反正按现代人, 大多数情况, 字节序是先左后右, 内存布局0-4G 我们也是先左后右一行一行理解的...
如果数据按字节序顺序存放在内存中, 即和人类思想一致, 那就是大端!!
* 可是大多数电脑和人类不一致...所以x86, arm默认都是小端!!
就这样吧, 看这次多久会忘...
转载地址:http://hicrj.baihongyu.com/