背景
有个蛮大的程序,在破烂机子上创建子进程后,子进程未如期运行。经过排查,发现子进程并未启动,于是打印错误码,得到申请内存失败的错误。
先让程序跑起来
得到的错误为:resource error (folk failure): cannot allocate memory
遇到这种错误八成是内存不足,关闭一部分正在运行的其他程序即可。果然如此操作便成功了。
然后我便有了个问题,这个子进程其实只是创建出来运行一个脚本的,它占用的内存非常大吗?
子进程创建所需拷贝的内容
子进程和父进程按理说代码和数据都是一样的,所以等于常量、代码段、堆栈全都要拷贝一份一模一样的,也就是说占用内存越多的进程在创建子进程的时候,复制出来的内存越多。
道理是这个道理,但这种事情很傻,毕竟如我这个使用场景,子进程是拿出来执行脚本的,根本不关心父进程的那些东西,拷贝这么多内存纯属浪费。
事实上现在能用到的操作系统也不会真的全都拷贝过去,子进程虽然继承了父进程所有资源的拷贝,但folk时的这个拷贝是浅拷贝,子进程的内存实际上指向父进程的内存页。只有当子进程或父进程尝试修改堆栈等资源的时候,相应的资源才会被深拷贝一份,作为子线程的实际资源使用。这种方法被称为写时拷贝。
8 条评论
附近小妹24小时空降a0heb.cn
华纳圣淘沙公司开户新手教程
零基础学会(183-8890-9465薇-STS5099)
华纳圣淘沙公司开户
华纳圣淘沙公司开户保姆级教程(183-8890-9465薇-STS5099)
一步步教你开通华纳圣淘沙公司账户(183-8890-9465薇-STS5099)
华纳圣淘沙公司开户分步图解
首次开户必看:(183-8890-9465薇-STS5099)
华纳圣淘沙全攻略
华纳圣淘沙公司开户实操手册(183-8890-9465薇-STS5099)
华纳圣淘沙开户流程视频教程
手把手教学:(183-8890-9465薇-STS5099)
华纳圣淘沙公司开户
华纳圣淘沙公司开户完全指南(183-8890-9465薇-STS5099)
果博东方客服开户联系方式【182-8836-2750—】?薇- cxs20250806】
果博东方公司客服电话联系方式【182-8836-2750—】?薇- cxs20250806】
果博东方开户流程【182-8836-2750—】?薇- cxs20250806】
果博东方客服怎么联系【182-8836-2750—】?薇- cxs20250806】
段落衔接自然,过渡流畅,读来一气呵成。
看的我热血沸腾啊www.jiwenlaw.com
想想你的文章写的特别好https://www.ea55.com/
怎么收藏这篇文章?
vldshe89712ET-文章很不错,感谢作者!https://kan.xiaoxinbk.com/49863.html/