参考:https://www.cnblogs.com/rohens-hbg/p/8630929.html
https://blog.csdn.net/jxhui23/article/details/8064766

一、进程用户空间的五个段
英文: .bss 、.data 、 .text 、 stack 、heap 。
中文:BSS段(bss segment),数据段:数据段(data segment),代码段:代码段(code segment/text segment),栈(stack)(栈又称堆栈), 堆(heap)。
下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。

(1)BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

(2)数据段(.data):数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

(3)代码段(.text):代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
(4)栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。
(5)堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

它是由操作系统分配的,内存的申请与回收都由OS(操作系统)管理。
PS:

全局的未初始化变量存在于.bss段中,具体体现为一个占位符;全局的已初始化变量存于.data段中;而函数内的自动变量都在栈上分配空间。.bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);而.data却需要占用,其内容由程序初始化,因此造成了上述情况。

bss段(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小。
data(已手动初始化的数据)段则为数据分配空间,数据保存在目标文件中。 数据段包含经过初始化的全局变量以及它们的值。BSS段的大小从可执行文件中得到 ,然后链接器得到这个大小的内存块,紧跟在数据段后面。当这个内存区进入程序的地址空间后全部清零。包含数据段和BSS段的整个区段此时通常称为数据区。

二、
Linux中进程的组成如下图所示:(图片来自C语言中文网)
Linux系统是一个多进程的系统,它的进程之间具有并行性、互不干扰等特点。也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任。其中,各个进程都运行在独立的虚拟地址空间。因此,即使一个进程发生异常,它也不会影响到系统中的其他进程。
虚拟地址空间有2的32次方是4G空间,但是物理空间是用多少给分配多少。
1、其中内核空间是3G-4G , 用户空间 0G-3G 。
2、注意堆和栈的生长方向和上下空间位置。

进程专题01篇——Linux下的进程结构(黑马程序员)相关推荐

  1. 查看linux进程的设备io,Linux下查看进程IO工具iopp

    Linux下的IO检测工具最常用的是iostat,不过iostat只能查看到总的IO情况.如果要细看具体那一个程序点用的IO较高,可以使用iotop .不过iotop对内核版本和Python版本有要求 ...

  2. linux进程和线程教程,Linux下查看进程和线程

    在Linux中查看线程数的三种方法 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行显示一个进程. 2.ps xH 手册 ...

  3. Linux进程列表巧用,Linux下的进程分析–PS

    当我们在 下要对进程进行监测和控制时,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps 就是最基本进程查看 .今天小编就来带领大家一起学习 下分析进程的命令--PS. 1. ps是什么? 要 ...

  4. linux孤儿进程组深入理解,LInux下僵尸进程与孤儿进程是如何产生的?

    1:如何产生: 僵尸进程,先于父进程终止,但是父进程没有对其进行善后处理(获取终止子进程有关信息,释放它仍占有的资源).消灭僵尸进程的唯一方法是终止其父进程. 孤儿进程:该进程的父进程先于自身终止.其 ...

  5. Linux下全平台聊天工具,程序员的全平台聊天软件:Rocket.Chat

    Rocket.Chat 是什么? 字面意思好像是"火箭聊天".Rocket.Chat 是一款类似于 Slack 的开源聊天软件,其支持 Windows.Mac.Linux 和 An ...

  6. Linux 学习笔记(借鉴黑马程序员Linux课程)

    Linux视频课程 简介 Linux诞生于1991年,由林纳斯·托瓦兹在21岁时完成.此后成为最为流行的服务器操作系统之一. Linux内核和系统发行版 由Linux系统内核和系统级应用程序两部分组成 ...

  7. python培训班-Python培训机构_高品质Python线下开发培训班推荐-黑马程序员

    Python编程基础基础班1 课时:15天技术点:97项测验:2次学习方式:线下面授 学习目标 1.掌握Python开发环境基本配置|2.掌握运算符.表达式.流程控制语句.数组等的使用|3.掌握字符串 ...

  8. linux定位哪个进程出发重启,定位Linux下定位进程被谁KILL

    hezhaoaqiang2012-11-09 11:10 可以请教你一个问题吗?关于arm的交叉编译.我是按照:http://blog.chinaunix.net/uid-27003388-id-32 ...

  9. linux下杀死进程全权讲解

    linux下杀死进程全权讲解 2009-10-27 08:57 佚名 linux 我要评论(0) 字号:T | T 本文将详细讲解linux杀死进程的多种命令,包含他们的作用,kill作用:根据进程号 ...

  10. linux ps指令查看进程,linux下查看进程指令-ps

    在Linux下查看进程指令可以用ps(process status) 是unix/Linux下通用的进程状态查看工具 ps的常用选项 选项功能介绍 -a显示所有终端中的进程.注意只有与终端关联的进程才 ...

最新文章

  1. ubuntu16.04安装mysql5.7.15
  2. win10+Tensorflow2 + cuda +RTX 3080 +cudnn 安装
  3. 更改Tomcat虚拟内存大小
  4. 安卓学习笔记17:常用控件 - 编辑框
  5. 从零开始徒手撸一个vue的toast弹窗组件
  6. print('HelloWorld'),Python为你打开一扇门。
  7. go使用makefile
  8. 六个建议防止SQL注入式攻击
  9. 基于SSM高校教师教务信息管理系统
  10. LOCAL_PRIVILEGED_MODULE 详解(3)
  11. 初创公司几个投资人,各占多少股份合适?
  12. Centos服务器巡检报告
  13. 计算机操作员操作题,[2017年精编]计算机操作员(初级)操作题.doc
  14. 平面设计和3D美术设计哪个更好就业?次世代又是什么?
  15. 内大计算机学院马学彬,内蒙古大学 计算机学院 2012-2013(一)课程总表.doc
  16. 百度百科里的个人介绍是怎么做上去的,人物百度百科词条创建
  17. Algorithms and Data Structures I
  18. java队列研究_【文献检索】队列研究检索策略过滤器
  19. ikbc pocker键盘 快捷键说明
  20. MySQL数据备份批处理

热门文章

  1. 【TencentOS tiny学习】源码分析(6)——互斥锁
  2. 怎么做浪漫表白二维码?给喜欢的人制作一个二维码
  3. 南师大C:真分数分解为埃及分数
  4. 在Vue2中使用百度脑图kityminder-core
  5. 【Python爬虫】你还在纠结选择哪个爬虫库嘛,全都拿来吧你
  6. 网易云信服务监控平台实践
  7. openstack资料-陈沙克整理
  8. SpringAOP静态代理
  9. 打造健康的程序员-饮食篇
  10. 会计凭证、成本中心、成本要素、总账、物料标准成本核算