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

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

代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量, 也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。 除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

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

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

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

转载于:https://www.cnblogs.com/mxk-star/p/7675419.html

linux 进程的 5 大段相关推荐

  1. linux 查看进程数据段,如何读取Linux进程中的代码段和数据段

    Linux下的程序的文件格式是ELF,里面分了各种段,有代码段.数据段.等.当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中的数据分别加载到内存中的对应位置.本文整理了用cpp程序读取 ...

  2. linux 进程 地址空间 内存分布 简介

    目录 一 进程空间分布概述 二 内核空间和用户空间 三 进程内存布局 栈 内存映射段 堆 BBS和数据段 C语言程序实例 栈与堆的区别 一 进程空间分布概述 对于一个进程,其空间分布如下图所示: 程序 ...

  3. Linux 进程地址空间 进程内存布局

    一 进程空间分布概述     对于一个进程,其空间分布如下图所示: 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初始化的 ...

  4. linux进程中的内存分布

    很多小伙伴在调试C代码的时候非常痛苦,C语言不像java那样可以给你指出具体的错误地方和错误原因,C语音因为指针的特殊性和C语言版本的兼容性的需要,很难直接定位到错误的地方.特别是各种段错误.溢出等. ...

  5. (大集合)Linux进程和线程的基本编程、通讯和例程【杂记】

    Linux 进程 和 线程 的基本 编程.通讯 和 例程 注:[杂记]系列为日常网搜资料的堆砌而积累成之.如有错误恭谢指出.标识为"原创"其实不完全是,只是多引用再整理和加上自己的 ...

  6. 同样学习Linux, 为何差别这么大? - 论打通Linux进程和内存管理任督二脉

    穆赫兰道和内陆帝国 我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些关键概念的理解非常模糊,比如不理解CPU.内存资源等的真正分布,具体 ...

  7. Linux进程与线程的区别 详细总结(面试经验总结)

    首先,简要了解一下进程和线程.对于操作系统而言,进程是核心之核心,整个现代操作系统的根本,就是以进程为单位在执行任务.系统的管理架构也是基于进程层面的.在按下电源键之后,计算机就开始了复杂的启动过程, ...

  8. Linux进程编程基础介绍

    Linux系统是一个多进程的系统,它的进程之间具有并行性.互不干扰等特点.也就是说,每个进程都是一个独立的运行单位,拥有各自的权利和责任.其中,各个进程都运行在独立的虚拟地址空间,因此,即使一个进程发 ...

  9. Linux 进程必知必会

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 只是简单的描述了一下 Linux 基本概念,通过几个例子来 ...

最新文章

  1. R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)
  2. jenkins的基本操作
  3. Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools解决方案
  4. “数读”上海营商环境:对追求高水平稳态发展企业有比较优势
  5. python做excel数据分析统计服_Python也能做到Excel那样,条件统计轻松解决工作需求...
  6. iView学习笔记(三):表格搜索,过滤及隐藏列操作
  7. 算术移位的规则及逻辑移动的规则
  8. 吃货注意接收,精美美食图片壁纸来喽
  9. Windows核心编程_代码段共享_LocalAlloc/GlobalAlloc区别
  10. poj 3630 Phone List(字典树)
  11. 利用计算机辅助药物设计方法有何优点,计算机辅助药物设计的原理及应用
  12. mysql 绿色版的安装过程和配置
  13. st188脉搏传感器工作原理_各种传感器工作原理动态图,拿走不谢~
  14. 2019-2021届蓝桥杯——java真题集锦
  15. Java集合框架是什么?说出一些集合框架的优点?
  16. Lingo学习笔记(二)——常用函数
  17. 东京语言学校推荐|日本语言学校哪个好
  18. 浙江八年级 python_今年9月起 浙江八年级新增Python编程课程
  19. 大数据看惊天逆转+绝杀,亚洲杯时隔16年夺冠,恭喜女足
  20. 深入理解Linux自旋锁(1.0)

热门文章

  1. Intel的AVX2指令集解读
  2. the port is already in use
  3. 10. 我的第一个Java应用程序
  4. Android----Google code android开源项目(二)
  5. rhel5 下cacti安装日志
  6. 蓝桥杯 ALGO-65 算法训练 比赛安排
  7. 1046. 划拳(15)-PAT乙级真题
  8. 列车运行图的编制原则是什么_我国农村将有序推进村庄规划编制
  9. Oracle跟踪文件trace文件
  10. perl JSON与HASH 互相转换