一、什么是进程地址空间
1.进程地址空间回顾
📌本文默认针对32位CPU计算机系统进行阐述
地址空间描述的基本空间大小是字节,而在32位下,CPU去内存中寻址,最多能形成2^32个地址
2^32个字节也就是4GB的大小
我们在之前学习C语言时,学习指针、压栈等知识的时候,肯定画过下面这样的图🎞️
图中这块地址是分布在哪呢?我们在前面已经学习过操作系统、进程方面的知识,那难道图中的这块地址是在内存中吗?
答案:不是!图中这块是叫做虚拟地址空间!
那什么是虚拟地址空间?让我们来慢慢了解🚩
来段代码感受一下
我们定义一个全局变量然后让父子进程分别去打印其值,并将其地址也打印出来
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int g_val = 0;
int main()
{
pid_t id = fork();
if(id < 0)
{
perror("fork fail");
return 0;
}
else if(id == 0)
{
//child
printf("我是子进程,pid:%d,ppid:%d g_val:%d,&g_val:%p\n",getpid(),getppid(),g_val,&g_val);
}
else
{
//father
printf("我是父进程,pid:%d,ppid:%d g_val:%d,&g_val:%p\n",getpid(),getppid(),g_val