如果进程及其fork具有不同的数据副本,那么为什么它们的指针是相同的?
在下面的示例中,如果在父进程和子进程之间共享count,我们将看到count: 2
。但是,计数不是共享的。但是,为什么&count
在父进程和子进程中都返回相同的值?
输出:
count: 1 0x7fff5a617510
count: 1 0x7fff5a617510
程序:
#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>
int main() {
pid_t pid;
int count = 0;
pid = fork();
count++;
printf("count: %d %p \n", count, &count);
return 0;
}
答案 0 :(得分:3)
如评论中所述,这是因为虚拟寻址。 AFAIK无法查看物理地址,因为这是由内核和MMU处理的。
另外,请注意,即使在两个进程之间共享count(使用共享内存;例如参见man shmget
),也会出现竞争条件。