linux下内存管理是通过虚拟内存管理的,在分配内存时并不是在物理内存开辟了一段空间,而是在使用时才分配,并且是通过段页式管理。内存分配以页为单位,而页是通过段管理,各个段之间是独立的,方便管理。linux程序执行时,能够分为以下的几个内存段:

一、BSS段

BSS是block started by symbol的简称,该段属于静态内存分配,用于储存未初始化的全局变量或者是默认初始化为0的全局变量,它不占用程序文件的大小,但占用程序执行时的内存空间。

代码示例:

#define DEBUG "debug"int space[1024][1024];int main(){char *a=DEBUG;return 1;
}

上面声明了一个space的二维数组,是一个全局变量,没有被初始化。通过nm

一、init

程序初始化入口代码,在main()之前运行。

二、bss段

BSS段属于静态内存分配。通常是指用来存放程序中未初始化的全局变量和未初始化的局部静态变量。未初始化的全局变量和未初始化的局部静态变量默认值是0,本来这些变量也可以放到data段,但是因为他们都是0,所以为他们在data段分配空间并且存放数据0是没有必要的。

程序在运行时,才会给BSS段里面的变量分配内存空间。

在目标文件(*.o)和可执行文件中,BSS段只是为未初始化的全局变量和未初始化的局部静态变量预留位置,它并没有内容,所以它不占据空间。

三、data段

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

四、text段

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

五、rodata段:

存放的是只读数据,比如字符串常量,全局const变量和#define定义的常量。例如:char *p=123456", "123456"就存放在rodata段中。

linux程序执行时内存情况相关推荐

  1. ubuntu查看程序运行时内存情况:top命令

    参考自:理解virt res shr之间的关系 - linux linux_ubuntu查看系统资源占用(内存,cpu和进程)

  2. 菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)

    菜鸟学习笔记:Java面向对象篇上 Java面向对象的思想 Java程序执行过程内存分析 Java垃圾回收机制 构造方法 方法重载(overload) static关键字 this关键字 Java面向 ...

  3. Hello程序的转换处理过程及程序执行时的数据流动过程

    文章目录 1 Hello程序的转换处理过程 2 Hello程序执行时的数据流动过程 1 Hello程序的转换处理过程 经典的" hello.c "C-源程序: hello.c的AS ...

  4. c语言程序执行时无法输入字符串,C语言程序设计中键盘输入数据的方法分析

    1. 引言 C语言程序设计是一门实践性很强的语言课程,在程序设计过程中经常需要从键盘输入所需要的数据.C语言没有专门的输入语句,可以调用C语言编译系统提供的函数库中的库函数来实现.有些程序虽然调试成功 ...

  5. linux程序崩溃时调用链,Linux 获取并分析程序崩溃时的调用堆栈

    下面是一个小例子,说明了程序出现段错误时,如何打印程序的堆栈信息. #include #include #include #include static void WidebrightSegvHand ...

  6. java 内存情况_Java代码中获取运行时内存情况

    在此之前,还是先看下JVM内存结构和JVM参数调优,网上太多不说也罢. 另外提醒的是方法反映的都是java这个进程的内存情况,跟操作系统的内存根本没有关系. public class Test { p ...

  7. C++程序运行时内存布局之--无继承情况下的虚函数

    2019独角兽企业重金招聘Python工程师标准>>> 虚函数是C++实现多态的关键,没有虚函数,C++只能是OB,不能完成OO. 本文介绍的是没有继承情况下,带有虚函数的类在内存中 ...

  8. linux程序执行失败,调试时提示 .dynamic section for .so.* is not at the expected address

    调试现象:(gdb) r Starting program: /usr/local/sdata/sbin/sdatad warning: .dynamic section for "/lib ...

  9. Linux创建线程时 内存分配的那些事

    文章目录 问题描述 问题分析 针对问题1 的猜测: 针对问题2 的猜测: 原理追踪 总结 问题描述 事情开始于一段内存问题,通过gperf工具抓取进程运行过程中的内存占用情况. 分析结果时发现一个有趣 ...

  10. linux 安装simg2img,linux可执行文件执行时提示No such file or directory(docker环境中运行的ubuntu镜像)...

    linux下在转换system.img文件类型时,提示 首先进入到了可执行文件所在目录下,并将system.img也放在同一目录下: 查看文件信息,可以看到文件是存在的,并且是可以执行的. 于是执行如 ...

最新文章

  1. 组合特征(一)tfidf(word+article)
  2. js生成批次号_js生成验证码
  3. ssm拼接html,SSM前后端分离 ssm+html+js(ajax) 这种controll层的返回值是结合或者网址...
  4. 15行代码AC_ 【蓝桥杯】兴趣小组(解题报告+思考)
  5. 【转】删除已经存在的 TFS Workspace
  6. dexpler的使用方法
  7. Fragment的保存
  8. 软件安装下载的镜像站、国内源
  9. 快速排序算法_大佬的快速排序算法,果然不一样
  10. 仿钉钉流程设计(.net工作流)之普通流程模板配置
  11. Nginx-免费SSL证书申请
  12. C++关键字分析系列
  13. ORA-01455: converting column overflows integer datatype
  14. SQL Server电影院数据库管理系统【英文版-源码】--(Movie Theatre Management System Database)
  15. Spring中的applicationContext.xml与SpringMVC的xxx-servl
  16. 2017 ACM Arabella Collegiate Programming Contest A. Sherlock Bones GYM101350A
  17. 云鲸扫拖一体机器人说明书_云鲸小白鲸扫拖一体机器人 真实的测评带你走进智能化家居时代...
  18. 有苦有乐的算法 --- 二叉树的按层遍历
  19. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储
  20. 智能聊天机器人实现(源码+析)

热门文章

  1. python获取灰度图边界
  2. PHP实现Trie树(字典树)
  3. mysql 启动必须加-h_Windows 安装 nginx,MySQL 等软件并加入系统服务启动详细
  4. Flutter之CupertinoSwitch和Switch开关组件的简单使用
  5. fast虚拟服务器ip地址设置,falogin.cn fast怎样正确设置电脑的IP地址和DNS等参数? - falogincn登录页面...
  6. MQTT服务器Mosquitto安装及使用
  7. Google 开源最新 NLP 模型,能处理整本《罪与罚》
  8. 为什么说 80% 的程序员都缺乏基本功?
  9. 我是如何通过思维系统实现年薪50万的?
  10. Android Multimedia框架总结(三)MediaPlayer中创建到setDataSource过程