fork的几道面试题 【Linux从基础到进阶】


请把:
第一道题和第二道题对比着看
第三道题和第四道题对比着看

第一道题

请先观察下面代码
在这里插入图片描述
再观察下面的执行结果
在这里插入图片描述
请问,这个n是同一块空间吗?

答案:不是

那为什么这个两个n打印的地址一样呐?

这两个地址都是虚拟地址,并不是子进程和父进程的n在磁盘中的真实的物理地址。
首先,子进程先复制父进程,同时也把父进程的n变量的虚拟地址空间的地址也复制了,所以此时打印的地址值一样,由于 写时拷贝技术,(我另外一篇博文中大概讲了这个)这两个此时共用一块空间,而当在子进程中执行到 n =3,这句代码时,子进程重新为n开辟空间,把3的值存到里面。所以父进程和子进程中n的值不一样。

第二道题

观察下面代码,请问会打印出几个A?
在这里插入图片描述
让我们执行一下,观察结果
在这里插入图片描述
为什么会打印出3个A呐?
在这里插入图片描述
所以会打印出3个A。
在这里插入图片描述

第三道题

让我们观察下面代码

请问会打印出几个A?
在这里插入图片描述

让我们看一下运行结果,结果是6个

在这里插入图片描述
那为什么是6个呐?
在这里插入图片描述

第四道题

让我们观察下面代码
请问会打印出几个A?
在这里插入图片描述
让我们运行一下结果,发现此时为8个A
在这里插入图片描述
那为什么是8个A?
在这里插入图片描述
所以最终为8个A。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值