CPU大小端模式
一、为何会有大小端之分?
在计算机系统中,一个存储单元的大小为一个字节(1Byte = 8bit),一个存储单元对应一个地址单元。(按字节编址)
对于位数大于8位的处理器,如16,32,64位等,由于其寄存器宽度大于一个字节,必然存在着多字节顺序安排的问题。这就衍生出了大端存储、小端存储的差异。
二、什么是大端和小端?
-
大端存储:在 一个数据要占用的内存空间 中,高位字节存储在低地址,低位字节存储在高地址。(与人们的阅读顺序相符)
-
小端存储:在 一个数据要占用的内存空间 中,高位字节存储在高地址,低位字节存储在低地址。(与人们的阅读顺序相逆)
eg. 一个 int型数据 0x7bH (123)
-
大端存储(低地址 0 → 高地址 4G)
(0x0000 0000) → … 00 00 00 7b … → (0xffff ffff) -
小端存储(低地址 0 → 高地址 4G)
(0x0000 0000) → … 7b 00 00 00 … → (0xffff ffff)
注:数据类型大于一个字节时(int,float…),才有大小端问题。例如,char型数据不存在分大小端,以两个char型字符存储的汉字亦不分。
三、各有何优缺点?
小端存储,做强制类型转换时,可以不用改变内存中的内容。
大端存储,符号位位于内存首位,易于判断。
其实没有很大的差异。。Inter当时使用小端可能是为了规避专利问题。
大端模式:PowerPC、IBM、Sun
小端模式:x86、DEC
ARM比较灵活,既可以工作在大端模式,也可以工作在小端模式