您的位置:首页 > 编程语言 > C语言/C++

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

2016-03-28 21:46 381 查看
各位看官们,大家好,上一回中咱们说的C程序内存布局的例子,这一回咱们说的例子是:从内存的角度看进程和线程。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们刚刚介绍完C程序的内存布局,我们趁热打铁,从内存的角度来分析一下进程和线程。

不管是进程还是线程,他们都会加载到内存中才能运行,因此他们在内存中的布局和其它C程序的内存布局完全相同。进程和线程的内存布局也分为代码区,数据区,堆区和栈区。

对进程来说,父子进程只共享代码区中的内容,父子进程拥有各自的数据区,堆区和栈区。而且它们只能访问自己进程空间中的内容。这也是多进程运行时需要通过其它方式进行通信的原因,比如使用管道在两个进程之间进行通信。

对于线程来说,多个线程共享主进程的内存资源,包括代码区,数据区,堆区和栈区。不过每个线程拥有 自己独立的栈区,而且不同其它线程共享。线程共享主进程的资源后,线程之间的通信变的容易一些,它 们可以直接使用主进程的资源,而且不需要借助三方的工具来使用资源。

每个进程拥有自己的进程空间,在创建进程时需要为进程分配这些空间,因此需要更多的时间来创建进程。每个线程都在共享主进程的内存空间,在创建线程时只需要分配栈区给他们的就可以,其它的分区都是共用的,因此创建线程的时间会快一些。这也是线程比进程高效的原因。

进程的内存空间是私有的,而线程的内存空间是共享的。因此,线程之间的通信比进程之间的通信效率 高。这才是线程与进程最大的区别,这也是大家喜欢线程最主要的原因。

各位看官,关于从内存角度看进程和线程的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: