导航

X86 32位机器程序运行中多字节数据内存使用

主要是想弄明白程序运行中,是先使用大地址的内存,还是小地址的内存?

多字节数据类型(如int),其地址指向的是大地址还是小地址? 大小地址对应的是数据的高位还是低位?

自己想的,也不知道对不对,希望大家指正。

 

代码:

#include <stdio.h>
union u{
    int i;
    char c[4];
};
int main()
{
    int i = 0;
    int j = 1;
    int *p;
    p=&i;
    printf("%lu--->%d\n",p,*p);    //输出:3218627596--->0
    p++;
    printf("%lu--->%d\n",p,*p);   //输出 : 3218627600--->1

    printf("%lu--->%d\n",p、&j,j);   //输出 :3218627600--->1            到这可以看出程序运行中,是显示用小地址的内存,再使用大地址的内存。 指针++,地址增加。        
    union u uu;
    uu.i=10000;

  printf("%lu--->\n",&uu);   //输出 :3218627608--->10000
    printf("%lu--->%d\n",&uu.i,uu.i); //输出 :3218627608--->10000
    for(i=0;i<4;i++){
        printf("%lu--->%d\n",&uu.c[i],uu.c[i]);   //输出 :3218627608--->16   3218627609--->39  3218627610--->0  3218627611--->0
    }

//到这可以看出,共同体的地址=uu.i的地址=char[0]的地址。 char[1]的地址=char[0]的地址+1,说明了int*指向的是int所占的4个字节地址中的最小的一个。


    uu.c[0] = 'a';
    printf("%lu--->%d\n",&uu.i,uu.i);  //输出 :3218627608--->10081

//改变a[0]的值,发现i的个位十位的数值发生了变化,说明小地址存的是数据的低位,大地址存的是数据的高位。

  return 0;
}

 

 










posted on 2012-02-17 17:39  李泽  阅读(364)  评论(1编辑  收藏  举报