目录
程序地址空间
以下这张空间分布图大家应该都见过
在Linux操作系统中,我们可以通过以下代码对该布局图进行验证:
运行结果如下,与布局图所示吻合的:
下面我们来看一段代码:
代码中使用fork函数创建了一个子进程,其中让子进程将全局变量g_val从100变为200后打印,而父进程先休眠3秒,再打印全局变量的值
但是按道理来说,子进程打印全局变量值为200,而父进程是在子进程将全局变量修改之后在执行的,照理说打印时全局变量也应该是200
但是代码运行结果如下:
两个完全相同地址处的全局变量,居然打印出来两个不同的值
如果我们是在同一个物理地址处获取的值,那必定是相同的,而现在同一个地址处获取得到的值居然不相同,那我们可以推断,这个打印出来的地址绝对不是物理地址!!!
实际上我们在语言层面上打印出来的地址都不是物理地址,而是虚拟地址,物理地址用户都是看不到的,是由操作系统进行统一管理的
所以就算父子进程中打印出来的全局变量的地址