2008年7月22日 星期二

memory address and Little-Endian

最近看了一些有關 Big-Endian 與 Little-Endian 的資料,就寫個小程式觀察一下

編譯環境: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;
}



學到的幾點:
  1. 這個編譯環境下,int 與 long 最大值相同 ( C90 的 INT_MAX 為 32,767),所使用 byte 數也相同。
  2. 變數的記憶體位址是後宣告的在前面,而且有些沒有用到 (可見參考網頁)。
  3. 目前大部分的 CPU 都是使用 Little-Endian
參考網頁
用 C 語言窺探記憶體
http://libai.math.ncu.edu.tw/bcc16/pool/1.33.shtml

沒有留言: