fork的"写时复制"问题, 求大牛指点~

gnudennis 2013-01-13 07:33:07
#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也是这样吗?
...全文
118 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnudennis 2013-01-13
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
这两个&a都在不同的进程空间里了……地址一样又怎么样。又不是物理地址一样。
感谢大牛~一时没有反应过来~
FancyMouse 2013-01-13
  • 打赏
  • 举报
回复
这两个&a都在不同的进程空间里了……地址一样又怎么样。又不是物理地址一样。

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧