編譯環境:Windows XP、minGW
#include <stdio.h>
#include <limits.h>
int main(){
long a,b[6];
printf("int max =%d\tlong max=%d\n\n",INT_MAX,LONG_MAX);
printf("address of variables(a defined first):\n");
printf("b[0]\tb[1]\tb[2]\n%u\t%u\t%u\n\n",&b[0],&b[1],&b[2]);
printf("b[4]\tb[5]\ta\n%u\t%u\t%u\n\n",&b[4],&b[5],&a);
a=0x1234abcd;
printf("about endian:\n\n");
printf("set a's value = %x\n\n",a);
unsigned char *ptr;
ptr=(unsigned char *)&a;
printf("value store in the bytes of a\n1st\t2nd\t3rd\t4th\n");
printf("%x\t%x\t%x\t%x\n",*ptr,*(ptr+1),*(ptr+2),*(ptr+3));
return 0;
}
學到的幾點:
- 這個編譯環境下,int 與 long 最大值相同 ( C90 的 INT_MAX 為 32,767),所使用 byte 數也相同。
- 變數的記憶體位址是後宣告的在前面,而且有些沒有用到 (可見參考網頁)。
- 目前大部分的 CPU 都是使用 Little-Endian
用 C 語言窺探記憶體
http://libai.math.ncu.edu.tw/bcc16/pool/1.33.shtml