探索Linux:进程(内存布局、栈)

本篇文件记录自己在从书籍中了解到的进程相关知识

进程与程序

进程是程序执行的一个实例, 可以用一个程序来创建多个进程实例。进程就类似于人类, 被产生后最终消亡, 而且只有一个父亲。

从内核角度看, 进程的目的就是担当分配的系统资源(CPU时间、内存等)的实体。且其由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量, 而内核数据结构则用于维护进程状态的信息。

进程内存布局

每个进程所分配的内存由很多部分组成, 通常称之为“段”。 如下所示:

  • 文本段

    包含了进程运行的程序机器语言指令。 具有只读属性, 防止进程修改程序指令。同一程序的多个进程实例共享同一文本段, 进程将程序代码拷贝到虚拟地址空间中。

  • 初始化数据段

    包含显式初始化的全局变量和静态变量。 当程序加载时,从可执行文件中读取这些变量的值。

  • 未初始化数据段

    包含了未进行显示初始化的全局变量和静态变量。被称为BSS段。程序在磁盘上存储时, 没有为此段的变量分配存储空间。可执行文件仅仅记录未初始化数据段的位置及所需大小, 运行时再分配内存。

  • 栈是一个动态增长和收缩的段, 由栈帧组成。系统为每个调用的函数分配一个栈帧。 栈帧中存储函数的局部变量、实参、和返回值。

  • 堆是可在运行时动态进行内存分配的一块区域。堆顶端称为program break

可以利用shell命令查看程序的文本段、初始化数据段、未初始化数据段大小:


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值