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;
}
多字节数据类型(如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;
}
相关文章推荐
- X86_64机器编译运行32位程序
- 程序运行在X86和X64机器上由字节分配不一样引发的问题
- 使用Process类避免在一台机器上运行同一程序的多个实例
- Ubuntu 64位机器上运行32位程序
- redis中可以使用的内存分配的库和redis默认是被build成32位的可执行程序
- 使用CLR Profiler查看C#运行程序的内存占用情况
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- 64位系统上运行32位程序能否申请到8G内存?
- 如何配置来增加eclipse下运行java程序的jvm使用内存
- JVM运行时数据区探索与直接内存的使用
- 【ZT】如何在32位程序中突破地址空间限制使用超过4G的内存
- 有如下CAT_s结构体定义,回答: 1) 在一台64位的机器上,使用32位编译,Garfield变量占用多少内存空间?64位编译又是如何?
- Qt使用windows API获取程序运行时占用内存 good
- 用MAT分析JAVA程序运行时的内存使用情况
- 如何在32位程序中突破地址空间限制使用超过4G的内存
- 32位系统上开发的Access为数据库的程序在64位机器上运行出错的解决办法
- Java程序运行前后内存使用情况
- 64位系统上运行32位程序的内存限制
- 实验 3.1.5 查看代码中各数据存储位置 示例程序: mem_add.c 1. 在自己的机器上运行示例程序。 2. 分析实验结果,图示程序运行时各数据位置。
- 在X64位机器上捕捉32位程序的进程的内存镜像文件要点