zoukankan      html  css  js  c++  java
  • linux的fork()函数具体解释 子进程复制父进程什么

    1. #include<stdio.h>  
    2. #include<string.h>  
    3. #include<stdlib.h>  
    4. #include<unistd.h>  
    5.   
    6. void main()  
    7. {  
    8.     char str[6]="hello";  
    9.   
    10.     pid_t pid=fork();  
    11.   
    12.     if(pid==0)  
    13.     {  
    14.         str[0]='b';  
    15.         printf("子进程中str=%s ",str);  
    16.         printf("子进程中str指向的首地址:%x ",(unsigned int)str);  
    17.     }  
    18.     else  
    19.     {  
    20.         sleep(1);  
    21.         printf("父进程中str=%s ",str);  
    22.         printf("父进程中str指向的首地址:%x ",(unsigned int)str);  
    23.     }  
    24. }  
    子进程中str=bello
    子进程中str指向的首地址:bfdbfc06   这里取的是虚拟地址
    父进程中str=hello

    父进程中str指向的首地址:bfdbfc06  这里取的是虚拟地址


    解释:採用“写拷贝技术”,刚fork时候,子进程没有改动数据段的值。则子进程和父进程全部代码共享,同样的物理地址。同样的虚拟地址,

    当子进程改动某个变量时候,这个变量才真正复制到子进程,拥有自己的物理地址。可是虚拟地址还是一样,两个同样的虚拟地址指向的是不同的物理地址。

    所以出现上面的答案。


    这里虚拟地址同样   可是物理地址不一样





  • 相关阅读:
    mac 命令大全
    GAME OF THRONES 2
    GAME OF THRONES 1
    软件工程-作业一
    猜数字游戏
    摘自-角田光代《对岸的她》
    java复习总结
    艾米莉-狄金森
    初次接触软件工程
    Environment/reflection mapping & bump mapping
  • 原文地址:https://www.cnblogs.com/llguanli/p/8794497.html
Copyright © 2011-2022 走看看