考虑下面的代码片段:
null
if (fork() == 0) { a = a + 5; printf ( "%d,%d" , a, &a); } else { a = a –5; printf ( "%d, %d" , a, &a); } |
假设u,v是父进程打印的值,x,y是子进程打印的值。以下哪一项是正确的?
(A) u=x+10,v=y (B) u=x+10和v!=y (C) u+10=x和v=y (D) u+10=x和v!=Y 答复: (C) 说明: fork()在子进程中返回0,在父进程中返回子进程的进程ID。 在Child(x)中,a=a+5 在父母(u)中,a=a-5; 因此x=u+10。 父级和子级中“a”的物理地址必须不同。但是我们的程序访问虚拟地址(假设我们在使用虚拟内存的操作系统上运行)。子进程获得父进程的精确副本,“a”的虚拟地址在子进程中不会更改。因此,我们在父代和子代中得到相同的地址。看见 这 比如跑步。 这个问题的小测验
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END