不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的。
存储器中对数据的存储是以字节(Byte)为基本单位的,因此,字(Word)和半字(Half-Word)在存储器中就有两种次序,分别称为:大端模式(Big Endian)和小端模式(Little Endian)。
小端存储指的是数据低字节存储在内存低地址处,数据高字节存储在内存高字节处;
大端存储指的是数据低字节存储在内存高地址处,数据高字节存储在内存低字节处;
typedef unsigned long u32; typedef unsigned short u16; typedef unsigned char u8; int main(void) { u8 i; u32 data = 0x78563412; u8* p = (u8*)&data; for (i=0; i<4; i++) { printf("%#x ", p); printf("%#x ", *p); p++; } return 0; } /************************************************* 在VC++6.0中的输出结果是: 0x18ff40 0x12 0x18ff41 0x34 0x18ff42 0x56 0x18ff43 0x78 Press any key to continue *************************************************/
需要注意的几点是:
(1) 数据在寄存器中都是以大端模式存放的。
(2) 对于内存中以小端模式存放的数据。CPU存取数成时,小端和大端之间的转换是通过硬件实现的,没有数据加载/存储的开销。