计算机多字节数据存储模式(大/小端模式)
造冰箱的大熊猫@cnblogs 2021/4/10
1、大端模式 vs 小端模式
多字节数据存储时,可以先高字节再低字节,也可以是先低字节再高字节。以32位无符号整数0x12345678为例,该数值在存储器中占用四个字节的存储空间。如果偏移址addr=0x12,addr+1=0x34,addr+2=0x56,addr+3=0x78,为大端模式(高字节写入存储器低地址位)。如果偏移址addr=0x78,addr+1=0x56,addr+2=0x34,addr+3=0x12,为小端模式(高字节写入存储器高地址位)。
2、不同计算机系统的大小端模式
之前编写过一个小软件用于查询计算机的大小端模式,后发现完全没有必要。
1)大小端模式由处理器决定。可通过查阅处理器技术资料获知处理器的大小端模式,无需使用软件获取。
2)Oracle数据库提供功能可查询多种计算机系统的大小端模式。根据查询结果(网址,截图),个人计算机常用的x86和x86_64处理器(无论是运行Linux、Windows还是Mac操作系统)均为小端模式。
3)早期苹果计算机使用过的PowerPC处理器为大端模式。
4)TI公司C6678 DSP具有一个名为LENDIAN的管脚。DSP启动时该管脚上的电平高低决定了DSP使用大端模式还是小端模式。
3、检查计算机系统大小端模式的编程方法
检查计算机系统大小端模式的C代码示例如下:
WORD dummy = 0x1234;
BYTE * pt = ( BYTE * )( &dummy );
if ( (*pt) == 0x12 )
printf ( "当前计算机系统为大端模式\n" );
else
printf ( "当前计算机系统为小端模式\n" );
4、IA-32、IA-64、x86、x86_64和AMD64的区别
为便于理解2中Oracle数据库查询结果,对不同处理器架构标识予以说明:
x86:Intel公司研制了16位8086处理器后,又研制了更高性能的16位处理器80286和32位处理器80386。这些处理器具备向后兼容特性,也就是说新型号处理器支持旧型号处理器的指令集。此外,AMD等公司也生产80x86处理器。这些80x86处理器被统称为x86处理器,对应的指令集也被称为x86指令集。现在,由于16位x86处理器已退出商用市场,x86也特指32位x86微处理器。
IA-32:为了与其它生厂商生产的x86处理器区分开来,Intel从80486开始使用IA-32标识自家的32位处理器。
IA-64:Intel推出过名为Itanium(安腾)的64位处理器。该处理器使用特殊指令集,不兼容x86指令集,硬件和软件都需要重新开发,初期应用于服务器,后来在x86_64处理器的冲击下成为了“历史”。
x86_64、AMD64:AMD研制的64位处理器支持x86指令集,具有更好的兼容性,获得了用户的青睐。最初,AMD64特指AMD的64位处理器。后来,随着Intel也开始生产支持x86指令集的64位处理器,使用x86_64统称AMD和Intel的64位处理器。
参考资料