一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)相关的知识,希望对你有一定的参考价值。


各位看官们,大家好,上一回中咱们说的是从内存角度看进程和线程的例子,这一回咱们说的例子是:创建进程时的内存细节。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们都知道使用fork函数可以创建一个新的进程,今天我们一起说一下使用该函数创建进程时内存的一些细节问题。我们介绍的的重点还是内存布局中的四个分区。

  • 1.在父进程中使用fork时,会创建一个新的进程,我们叫它子进程,子进程有自己的内存空间;
  • 2.子进程的内存空间中没有代码区,子进程和父进程共享代码区;
  • 3.子进程的内存空间中拥有自己的数据区,堆区和栈区,并且这些区域中的内容是父进程区域中内容的副本;
  • 4.上面所说的副本表明父子进程中的内容是相同的,但是子进程没有直接从父进程复制这些内容,而是有点像C语言中的指针,子进程通过“指针”指向了父进程的内存,因此他们的内容是相同的;
  • 5.子进程没有直接复制父进程内存中的内容,是因为这样做会消耗时间和空间,影响创建进程的效率;
  • 6.当修改子进程内存空间中的内容时,子进程开始复制父进程内存空间的内容,这个时候,子进程内存空间的内容完全属于自己,这种变化就叫作写时复制技术(copy on write);
  • 7.因为子进程内存中的内容属于自己,所以修改子进程内存中的内容时不会影响父进程内存中的内容;这 一点,我们在前面章回举过具体的例子,这里就不再举例子了;
  • 8.执行execve系列函数时也会触发写时复制,关于execve系列函数,我们在后面章回中再做介绍;
  • 9.写时复制技术可以减少不必要的内存复制操作,进而提高创建进程的效率;

看官们,我们把创建进程时的内存细节一步一步地列出来了,希望能够帮助大家详细地理解创建进程时的内存细节问题。

各位看官,关于“创建进程时的内存细节”的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


以上是关于一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)的主要内容,如果未能解决你的问题,请参考以下文章

一起talk C栗子吧(第一百三十五回:C语言实例--exec系列函数一)

一起talk C栗子吧(第一百三十一回:C语言实例--C程序内存布局三)

一起talk C栗子吧(第一百三十四回:C语言实例--创建线程时的内存细节)

一起talk C栗子吧(第一百三十二回:C语言实例--从内存的角度看进程和线程)

一起talk C栗子吧(第一百五十三回:C语言实例--socket通信地址系统调用一)

一起Talk Android吧(第四百三十三回:Java8中的日期时间类)