zoukankan      html  css  js  c++  java
  • 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 ",num,&num);
       }
       else if(pid==0){
       printf("in child:num:%d addr:%x ",num,&num);
       }
    }
    父子进程中输出的num相同,num地址不相同
    父子进程中输出的num不同,num地址相同
    父子进程中输出的num相同,num地址也相同
    父子进程中输出的num不同,num地址不相同

    答案:B 错选:A
    虚拟地址空间。num地址的值相同,但是其真实的物理地址却不一样。
    linux下实现了一下,发现地址值真的一样。
    fork之后子进程复制了父进程的数据、堆栈。
    但是由于地址重定位器之类的魔法存在,
    所以,看似一样的地址空间(虚拟地址空间),
    其实却是不同的物理地址空间。
    同时可以验证c程序中输出的地址空间其实都是虚拟地址空间。
    
    
  • 相关阅读:
    【HDOJ】1243 反恐训练营
    Eclipse 点击 Run 自动生成 out 文件的错误
    经纬度转凯立德 K 码
    Android开发环境建立
    Android 学习过程中遇到的知识点
    Android
    Android
    素数距离问题
    取石子(一)
    素数求和问题
  • 原文地址:https://www.cnblogs.com/kxzh/p/9107603.html
Copyright © 2011-2022 走看看