32位保护模式下每个进程都有一个4G的地址空间,虽然这两个变量的地址是一样的,但实际上映射到的是不同的物理内存。
程序代码:
#include<stdio.h>
int main(void)
{
int var = 0, flag = 1, option;
while (flag) {
printf("<1>: Input a new value.\n"
"<2>: Show address and value.\n"
"<3>: Exit.\n");
scanf("%d", &option);
switch (option) {
case 1:
scanf("%d", &var);
case 2:
printf("Address of var: %p\n", &var);
printf("Value of var: %d\n\n", var);
break;
default:
flag = 0;
break;
}
}
return 0;
}
先运行这个程序,输入一个值2012,输入完成之后便看到了它的地址(0028FF38)和值(2012),然后再运行这个程序,不输入值,直接显示(选项2),你会发现var的值还是它的初值,也就是0,它的地址却和另一个程序var的地址一样。这也就说明它们其实存在于不同的物理内存中:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
[
本帖最后由 lz1091914999 于 2012-12-10 18:34 编辑 ]