2.1 虚拟地址
现在的 PC 机和工作站的操作系统大多都提供了多任务环境,可以同时运行多个应用程序(进程)。通过如下代码,同时运行两个应用程序,然后尝试打印各自的变量地址,却出现一致的结果。
#include <stdio.h>
int main(void)
{
int hoge;
char buf[256];
printf("&hoge...%p\n", &hoge);
printf("Input initial value.\n");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &hoge);
for (;;)
{
printf("hoge..%d\n", hoge);
/*
getchar()让控制台处于等待输入的状态.
每次敲入回车键,增加 hoge 的值
*/
getchar();
hoge++;
}
return 0;
}
运行结果如下,这两个进程的 hoge 看上去地址完全相同,但它们确实是在各自进程里面彼此独立无关的两个变量。通对这个实验发现,在如今的运行环境中,使用 printf()输出指针的时候,打印输出的并不是物理内存地址本身。