Linux 进程结构

代码区:加载的是可执行文件的代码段,其加载到内存中的位置由加载器完成。在有操作系统支持时,程序不需要关注这一位置;如果是自己移植操作系统,则需要事先规划各加载位置。这一点请参阅相关OS移植内容。


全局初始化数据区/静态数据区:加载的是可执行文件数据段,位置可位于代码段后也可以分开。程序 在运行之初就为该数据段申请了空间,在程序退出时才释放,因此,存储于数据段的数据的生命周期为整个程序运行过程。


为初始化数据区(BSS)。加载的是可执行文件BSS段,位置可以分开亦可以紧靠数据段。程序在运行之初就为该部分申请了空间,在程序退出时才释放,因此,存储玉该部分的数据的生命周期为整个程序运行过程。


栈区:由编译器自动分配释放,存放函数的参数值,返回值,局部变量等。在程序的运行过程中实时申请和释放,因此,局部变量的生存周期为申请到释放该段空间。


堆区:用于动态内存分配。一般由程序员分配和释放,若程序员不释放,程序结束时由OS回收。


系统之所以分成这么多个区域,主要基于一下考虑.


1.代码段和数据段分开,运行时便于分开加载,在哈佛体系结构的处理器将取得更好的流水线处理效率。


2.代码是依次执行的,由处理器的PC指针依次读入,而且代码可以被多个程序共享,数据在整个运行过程中有可能多次被调用,如果将代码和数据混合在一起将造成空间的浪费。


3.临时数据及需要再次使用的代码在运行时放入栈中,生命周期短,便于提高资源利用率。


4.堆区可以由程序员分配和释放,以便用户自由分配,提高程序的灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值