环境变量
环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数
环境变量是具有全局性的,通过环境变量我们看看Linux下进程的地址空间管理。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 int g_val = 0; //环境变量
5
6 int main()
7 {
8 pid_t pid = fork();
9 if(pid < 0)
10 {
11 perror("fork faild\n");
12 return 0;
13 }
14 else if(pid == 0)
15 {
16 printf("child %d:%d,%p\n",getpid(),g_val,&g_val);
17 }else{
18 printf("parent %d:%d,%p\n",getpid(),g_val,&g_val);
19 }
20
21 sleep(1);
22 return 0;
23 }
结果:
可以看到环境变量,在子进程中也是继承下了父进程中的环境变量的。
我们再修改一下代码如下:
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<unistd.h>
4 int g_val = 0; //环境变量
5
6 int main()
7 {
8 pid_t pid = fork();
9 if(pid < 0)
10 {
11 perror("fork faild\n");
12 return 0;
13 }
14 else if(pid == 0)
15 {
g_val = 10; //改变环境变量的值
16 printf("child %d:%d,%p\n",getpid(),g_val,&g_val);
17 }else{
18 printf("parent %d:%d,%p\n",getpid(),g_val,&g_val);
19 }
20
21 sleep(1);
22 return 0;
23 }
结果:
从结果可以看出:
1.变量的内容不一样,所以父子进程输出的变量不是同一变量
2.但是地址相同,说明该地址绝对不是物理地址
3.在Linux下,改地址叫做虚拟地址
分页&虚拟地址空间(MMU)
从图中可看出,同一个变量,相同的地址,其实是虚拟地址相同。其内容不同其实是映射到了不同的物理地址。