Big endian和Little Endian
PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是 little endian呢?
其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。
用文字说明可能比较抽象,下面用图像加以说明。比如数字0x12345678在两种不同字节序CPU中的存储顺序:如下所示:
Big Endian
低地址 高地址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 12 | 34 | 56 | 78 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Little Endian
低地址 高地址
----------------------------------------->
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 78 | 56 | 34 | 12 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
因此在应用程序移植到spu上的时候,要注意.
比如判断一个字节流是否是0x1234结尾,在intel x86平台上是i
unsigned char str[4] ={0x12, 0x34};
int *p=&str;
if(*p==0x3412) printf("stream end with 0x1234");
在cell spu上则成为
unsigned char str[4] __attribute__ ((aligned(4)))={0x12, 0x34};
int *p=&str;
if(*p==0x1234) printf("stream end with 0x1234");