请把:
第一道题和第二道题对比着看
第三道题和第四道题对比着看
第一道题
请先观察下面代码
再观察下面的执行结果
请问,这个n是同一块空间吗?
答案:不是
那为什么这个两个n打印的地址一样呐?
这两个地址都是虚拟地址,并不是子进程和父进程的n在磁盘中的真实的物理地址。
首先,子进程先复制父进程,同时也把父进程的n变量的虚拟地址空间的地址也复制了,所以此时打印的地址值一样,由于 写时拷贝技术,(我另外一篇博文中大概讲了这个)这两个此时共用一块空间,而当在子进程中执行到 n =3,这句代码时,子进程重新为n开辟空间,把3的值存到里面。所以父进程和子进程中n的值不一样。
第二道题
观察下面代码,请问会打印出几个A?
让我们执行一下,观察结果
为什么会打印出3个A呐?
所以会打印出3个A。
第三道题
让我们观察下面代码
请问会打印出几个A?
让我们看一下运行结果,结果是6个
那为什么是6个呐?
第四道题
让我们观察下面代码
请问会打印出几个A?
让我们运行一下结果,发现此时为8个A
那为什么是8个A?
所以最终为8个A。