您的位置:首页 > 其它

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

2012-02-17 17:39 543 查看
主要是想弄明白程序运行中,是先使用大地址的内存,还是小地址的内存?

多字节数据类型(如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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐