当前位置: 首页 > news >正文

10.程序地址空间_1

程序地址空间概念的引出

请先思考以下部分代码

程序代码

  1  #include <stdio.h>2  #include <unistd.h>3  #include <stdlib.h>4  #include <sys/types.h>5 6 int g_val = 0;7 8 int main()9  {10     pid_t id = fork();11     if(id < 0)12     {13         perror("fork");14         return 0;15     }16     else if(id == 0)17     { //child18         int cnt = 0;19         while(cnt <= 10)20         {21             printf("child[%d]: %d : %p\n", getpid(), g_val, &g_val);22             sleep(1);23             cnt++;24             if(cnt == 10)25             {26                 g_val = 100;                                                                    27                 printf("子进程已经更改全局变量了......   ");28             }29         }30     }31     else32     { //parent33         while(1)34         {35 36             printf("parent[%d]: %d : %p\n", getpid(), g_val, &g_val);37             sleep(2);38         }39     }40     return 0;41  }

程序输出结果

在这里插入图片描述
我们可以发现此时全局变量的值已经被修改了,但是同样地址的情况下,其中的数据内容竟然是不一样的

  • 父子进程中&g_val的地址是一样的
  • 但它们的值是独立的

✅ 为什么地址一样但值不共享?

因为 fork() 会复制整个进程的地址空间,包括代码段、数据段、堆和栈。虽然地址一样,但父子进程拥有各自独立的内存副本

这叫做:

写时复制(Copy-On-Write)机制

当子进程修改 g_val 时,系统会为它分配新的物理内存,父进程的 g_val 不会被影响。


📌 关键知识点总结

知识点说明
fork()创建一个新进程,返回两次:子进程返回 0,父进程返回子进程 PID
pid_t是进程 ID 的类型,定义在 <sys/types.h>
全局变量复制父子进程各自拥有独立的 g_val 副本
地址空间复制虽然地址一样,但物理内存不同
写时复制机制修改时才真正分配新内存,节省资源
getpid()获取当前进程的 PID,用于区分父子进程
sleep()控制输出节奏,便于观察变化

http://www.dtcms.com/a/466049.html

相关文章:

  • 6.0 Labview中的类面向对象编程-类的使用(OOP)
  • 上海精品网站建设想设计一个公司的网站
  • 【计算机】常见的缓存和查看方法
  • Linux 进程间通信机制详解
  • 低轨卫星光模块控制中的MCU芯片抗辐照性能研究
  • 网站建设faq男人和女人做哪个网站
  • 网站优化排名易下拉系统如何让网站自适应
  • CTF攻防世界WEB精选基础入门:xff_referer
  • 做presentation的网站wordpress搜索框去掉
  • 原型设计、UI设计、前端页面和后台管理页面之间的关系解析
  • Linux的设备驱动模型
  • 鸿蒙NEXT USB服务开发:从基础概念到实战应用
  • 神华集团 两学一做 网站做金融量化的网站
  • 深圳拼团网站建设徐州网站建设报价
  • cpp-httplb库使用手册
  • TextureStreaming针对不同分档机型一般怎么设置
  • 自己做网站2008R2好还是win7qq推广
  • 快速上手!如何用GEO优化让品牌在AI搜索中脱颖而出
  • 道可云人工智能每日资讯|2025世界智能网联汽车大会将在北京举办
  • 【2025最新】【win10】vs2026+qt6.9+opencv(cmake编译opencv_contrib拓展模
  • 惠州做网站电话网站转移后后台无法登陆
  • 学习软件开发的网站公众号软文推广
  • 网站页面大小优化怎么做泉州网站制作哪个好微
  • 代理服务器ip免费邹平县seo网页优化外包
  • 深度学习基础-Chapter 01-感知机和全连接
  • 企业内部网站模板下载网站如何做ICP备案
  • 用js获取浏览器视口高度,并设置元素满屏显示
  • 南山网站建设哪家好静宁县建设局网站
  • Javaer快速掌握Python笔记
  • 刘娇娇做网站骗钱的有什么做网站优化公司