文章目录
  • 大端字节序
  • 小端字节序

int a = 0x11223344存储方式

  • 大端字节序
地址 内容
低地址 0x11 a[0]
高地址 0x33 a[3]
  • 小端字节序
地址 内容
低地址 0x33 a[3]
高地址 0x11 a[0]

此处的a[0]仅表示a的高位即0x11其他依次类推

  • 调试

定义两个变量:

1
2
3
int m1 = 0x11223344;   
int m2 = 0x55667788;
int a[4] = {0x12,0x34,0x56,0x78};

单步调试进去查看内存情况:

1
2
3
4
5
0018FF10  CC CC CC CC CC CC CC CC CC CC CC CC CC CC  烫烫烫烫烫烫烫   
0018FF1E CC CC CC CC CC CC 12 00 00 00 34 00 00 00 烫烫烫....4...
0018FF2C 56 00 00 00 78 00 00 00 88 77 66 55 44 33 V...x...坵fUD3
0018FF3A 22 11 78 FF 18 00 4E 91 44 00 FF FF FF FF ".x...N慏.....
0018FF48 88 FF 18 00 B9 30 42 00 01 00 00 00 48 13 .....0B.....H.

由上述内存情况分析可得:

  • 变量的存储是从高地址 –> 低地址,即m2的地址 < m1的地址
  • 该系统是小端存储的,如m1的高位0x11存放在高地址处
  • 注意数组的存放是从a[0]放在低地址处

所以,如果有如下共同体:

union test {
    int i;
    char a[4];
}

union test t;
t.i = 0x11223344;
print("%x\n",t.a[3]);  
}

当运行的系统是小端字节序时,此时的a[3]的值就为0x11了。


文章目录