关于LINUX 大小端模式判断的理解问题
木马男孩 2014-09-30 05:02:56 在linux 系统的kernel/arch/arm/kernel/setup.c 的这个文件中,有如下一段代码,用来判断CPU所处的大小端模式。
static union { char c[4]; unsigned long l; } endian_test __initdata = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.l)
假设 c[0]在内存中的地址为0xf0000000 那么 c[1]-c[3]的地址分别为 0xf0000001 0xf0000002 0xf0000003 ,l的地址为0xf0000000;
那么在小端模式中 各地址中的值分别为
0xf0000000 = 'l'
0xf0000001 = '?'
0xf0000001 = '?'
0xf0000001 = 'b'
在大端模式是
0xf0000000 = 'b'
0xf0000001 = '?'
0xf0000001 = '?'
0xf0000001 = 'l'
但是我用数组赋值的方式去理解,怎么也理解不通啊。
对于c={ { 'l', '?', '?', 'b' } }; 应该是这么赋值 c[0]='l'; c[1]='?';c[2]='?'; c[3]='b'
这么看的话,无论是大还是小端,c[0] 总是等于 'l'.
这显然与上面实际的相反啊。请高手解答,我该如何去理解