考虑以下代码片段:
if (fork() == 0)
{ a = a + 5; printf(“%d,%d\n”, a, &a); }
else { a = a –5; printf(“%d, %d\n”, a, &a); }
令u,v为父进程打印的值,x,y为子进程打印的值。以下哪一项是TRUE?
(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。
在孩子(x)中,a = a + 5
在父级(u)中,a = a – 5;
因此x = u + 10
父级和子级中“ a”的物理地址必须不同。但是我们的程序访问虚拟地址(假设我们正在使用虚拟内存的操作系统上运行)。子进程会获得父进程的精确副本,并且虚拟地址“ a”在子进程中不会更改。因此,我们在父级和子级中都获得相同的地址。但是在python3中,v和y不相等。请参阅此内容(对于Python)和请参阅此内容(对于C)。
这个问题的测验