zoukankan      html  css  js  c++  java
  • fork函数的一些小结

      今天遇到一个这样的问题,假设父进程有一个变量S,fork后,子进程中的变量S地址是否和父进程中的变量S

    是相同的?

      再学操作系统的时候,知道fork是采用的写时复制,所以如果子进程或者父进程不对变量S做修改的话,它们应该

    是指向同一块物理内存,如果有修改,那么它们会指向不同的物理内存,但虚拟内存地址还是相同的,所以在子进程中

    输出&S和在父进程中输出&S,结果是一样的。

    下面补充两个程序的运行结果:

    #include "stdio.h"
    #include "unistd.h"
    
     int main()
     {
              int s=5;
              if(fork()==0)
              {
                      //s+=5;
                      printf("child: %d %x
    ",s,&s);
              }
             else
             {
                      //s-=5;
                      printf("parent: %d %x
    ",s,&s);
              }
              return 0;
     }

    运行结果:

    上面的代码并未修改s的值,下面的代码修改了s的值,此时再测试

    #include "stdio.h"
    #include "unistd.h"
    
     int main()
     {
              int s=5;
              if(fork()==0)
              {
                      s+=5;
                      printf("child: %d %x
    ",s,&s);
              }
             else
             {
                      s-=5;
                      printf("parent: %d %x
    ",s,&s);
              }
              return 0;
     }

    运行结果:

  • 相关阅读:
    6.25作业
    博客园第一篇
    532. 数组中的K-diff数对
    echarts
    跨域问题
    数组中第三大的数 leetcode 414
    除自身以外数组的乘积leetcode 238
    xshell工具
    插入、删除和随机查询时间复杂度都为O(1) leetcode 381
    组合总和3 leetcode 216
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/11409751.html
Copyright © 2011-2022 走看看