免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2354 | 回复: 9
打印 上一主题 下一主题

fork 后变量的地址问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-10 15:19 |只看该作者 |倒序浏览
#include<apue.h>
#include<unistd.h>
#include<stdlib.h>
#include<setjmp.h>

int glob=6;
char buf[]="a write to stdout\n";

int main()
{
&nbsp;&nbsp;&nbsp;&nbsp;int var;
&nbsp;&nbsp;&nbsp;&nbsp;pid_t pid;
&nbsp;&nbsp;&nbsp;&nbsp;var=88;
&nbsp;&nbsp;&nbsp;&nbsp;if(write(STDOUT_FILENO,buf,sizeof(buf))!=sizeof(buf))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err_sys("write error!");
&nbsp;&nbsp;&nbsp;&nbsp;printf("before fork \n");

&nbsp;&nbsp;&nbsp;&nbsp;if((pid=fork())<0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;err_sys("fork error\n");
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else if(pid==0)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;glob++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var++;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{sleep(2);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;printf("pid=%d,glob=%d,var=%d\n",getpid(),glob,var);
&nbsp;&nbsp;&nbsp;&nbsp;printf("address glob=%d,address var=%d\n",&glob,&var);
&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}



fork 后子进程获得了父进程的变量的拷贝,但是这两个进程的变量 地址是一样的,值确不一样,为什么,子进程的变量又存放在哪里

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
2 [报告]
发表于 2009-02-10 15:29 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2009-02-10 15:39 |只看该作者
楼上能不能说的详细一点

论坛徽章:
0
4 [报告]
发表于 2009-02-10 15:48 |只看该作者
原帖由 jiean 于 2009-2-10 15:39 发表
楼上能不能说的详细一点


在程序中的地址为逻辑地址,32位环境下每个进程的逻辑地址都为0-4G。内存条上的那个地址称为物理地址。
操作系统会将每个进程中的逻辑地址通过段式转换以及页式转换将其转化为对应的物理地址。由于每个进程都有独立的页表,所以虽然不同的进程中的某个变量有相同的逻辑地址,但是由于它们的页表不同,所以对应出去的实际的物理地址也不相同。

评分

参与人数 1可用积分 +5 收起 理由
langue + 5 我很赞同

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2009-02-10 16:27 |只看该作者
记得最近一段时间,好像就是前2天左右吧,有人问过类似问题的

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2009-02-10 16:48 |只看该作者
好多人都是不看理论,一上来就搞编程的,
莫非都是些中学生?

看看《操作系统》一类的书,基础打好还是很有必要的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2009-02-10 16:49 |只看该作者
原帖由 flw 于 2009-2-10 16:48 发表
好多人都是不看理论,一上来就搞编程的,
莫非都是些中学生?

看看《操作系统》一类的书,基础打好还是很有必要的。

agreed.

论坛徽章:
0
8 [报告]
发表于 2009-02-10 19:51 |只看该作者
原帖由 flw 于 2009-2-10 16:48 发表
好多人都是不看理论,一上来就搞编程的,
莫非都是些中学生?

看看《操作系统》一类的书,基础打好还是很有必要的。



能写代码也不错了,总比现在的很多硕士、博士,都毕业答辩了,还没写过几行代码的~~~
有问题,先看下书,再google,然后再问,效率会高些

论坛徽章:
0
9 [报告]
发表于 2009-02-10 20:16 |只看该作者
上学学的东西全还给老师了,惭愧啊

论坛徽章:
0
10 [报告]
发表于 2009-02-15 22:45 |只看该作者
原帖由 c/unix 于 2009-2-10 15:29 发表
逻辑地址,不是物理地址

言简意赅~无须再多言~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP