20180517 进程
下面代码的输出结果是()
|
1
2
3
4
5
6
7
8
9
10
11
12
|
int main(){ int pid; int num=1; pid=fork(); if(pid>0){ num++; printf("in parent:num:%d addr:%x\n",num,&num); } else if(pid==0){ printf("in child:num:%d addr:%x\n",num,&num); }} |
父子进程中输出的num相同,num地址不相同
父子进程中输出的num不同,num地址相同
父子进程中输出的num相同,num地址也相同
父子进程中输出的num不同,num地址不相同
答案:B 错选:A
虚拟地址空间。num地址的值相同,但是其真实的物理地址却不一样。linux下实现了一下,发现地址值真的一样。fork之后子进程复制了父进程的数据、堆栈。但是由于地址重定位器之类的魔法存在,所以,看似一样的地址空间(虚拟地址空间),其实却是不同的物理地址空间。同时可以验证c程序中输出的地址空间其实都是虚拟地址空间。

浙公网安备 33010602011771号