日期:2014-05-16  浏览次数:20763 次

fork的"写时复制"问题, 求大牛指点~
本帖最后由 dennis_fan 于 2013-01-13 19:34:22 编辑
#include <unistd.h>
#include <stdio.h>

int main(void)
{
int a = 3, *p = &a;
pid_t pid;
printf("Before-&a:%p, p: %p, a: %d\n", &a, p, a);

if ((pid = fork()) < 0) {
} else if (pid == 0) {
a = 2;
*p = 1000;
}
printf("&a: %p, p: %p, a: %d\n", &a, p, a);
}


输出结果:
不是说COW技术,修改值只是副本么? 问什么a的地址一样的? 还可以通过原来的指针值修改子进程的a的值.
难道说Linux使用某种机制保证了COW的透明性,即让程序员感觉不到"写时复制"的存在.

有谁看过原码, 可以给我解释解释么? 此外, windows的COW也是这样吗?

------解决方案--------------------
这两个&a都在不同的进程空间里了……地址一样又怎么样。又不是物理地址一样。