- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux程序代码段分析
?linux代码段,数据段,BSS段, 堆,栈
进 程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段(如代码段,数据段,BSS段,堆段,栈段)。在进程被载入内存中时,基本上被分裂成主要的6个小的节(section)---如, .text节, .data节, .bss节, 堆节, 栈节, 环境/参数节.
?
?
一、Linux进程的五个段
下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。
?
重点:
代码段、数据段、堆栈段,这是一个概念堆、栈、全局区、常量区,这是另一个概念
?
?
1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
?
2)数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。
?
3)BSS段:BSS段包含了程序中未初始化的全局变量,在内存中?bss段全部置零。BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
?
4)堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
它的物理内存空间是由程序申请的,并由程序负责释放。
?
5)栈:栈又称堆栈,栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。
???它是由操作系统分配的,内存的申请与回收都由OS管理。
?
举个具体的C语言的例子吧:
//main.c
int a = 0; //全局初始化区
char *p1; //全局未初始化区
main()
{
static int c =0;?//全局(静态)初始化区
int b; //栈
char s[] = abc; //栈
char *p2; //栈
char *p3 = 123456; //123456\0在常量区,p3在栈上。
p1 = (char *)malloc(10);
p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。
}
?
?
二、各个段在内存中的组织
各个段段在线性空间中的组织。直接上图:
+--------------------------------???高地址
+ envstrings?环境变量字串????
+--------------------------------
+ argv string?命令行字串????????
+--------------------------------
? +?env pointers?环境变量指针表
+--------------------------------
+ argv pointers命令行参数指针表
+--------------------------------
+ argc?命令行参数个数
+--------------------------------
? +?????main函数的栈帧??
+--------------------------------
+?????被调用函数的栈帧
+--------------------------------
+?????????......????????????????
+--------------------------------
+???????
您可能关注的文档
- AB与西门子的区别.doc
- ABS管的性能与应用.doc
- ADC的参考电压芯片TL431应用经验.doc
- ADSL经常断线的原因分析.doc
- ADSS光缆耐电痕护套料的研究.doc
- AE102A氧气充填泵概述,矿用氧气充填泵的特点及参数.doc
- AFR的基本情况和特点.doc
- AEFI监测方案9.doc
- AJPII汽油省油锭常见问题Q.doc
- AL-4624委托分析.doc
- 2026三生制药校园招聘备考题库含答案解析(夺冠).docx
- 2026三生制药校园招聘考试历年真题汇编含答案解析(夺冠).docx
- 阀门采购技术和质量规范标准.docx
- 2025年元宇宙行业技术构建及应用场景解读报告.docx
- 2025年智能穿戴芯片市场需求结构与趋势报告.docx
- 2025年元宇宙行业技术构建及应用场景趋势研究报告.docx
- 2025年消费电子压力传感器市场研究报告.docx
- 2025年元宇宙行业技术构建及应用应用创新报告.docx
- 《2025年高端农产品电商包装设计与品牌价值提升策略》.docx
- 2025至2030中国竹胶板行业细分市场及应用领域与趋势展望研究报告.docx
最近下载
- 国开(SC)-数据库运维-形考3(考核内容:第5章~第7章,30%)-学习资料.docx VIP
- 中国视神经脊髓炎谱系疾病诊断与治疗指南解读PPT课件.pptx VIP
- 出口用【箱单+发票】英文.docx VIP
- GB∕T42430-2024血液、尿液中乙醇、甲醇、正丙醇、丙酮、异丙醇和正丁醇检验.pptx VIP
- 部编版小学六年级下册语文单元测试卷全册(含答案).pdf VIP
- 高血压病的护理常规 高血压护理常规.doc VIP
- QUICK-376D-中文说明书使用手册.pptx VIP
- 部编人教版五年级下册小学语文全册单元测试卷(含期中期末试卷).doc VIP
- 2025年部编版小学五年级下册语文全册单元测试卷及答案 .pdf VIP
- GB∕T42430-2024血液、尿液中乙醇、甲醇、正丙醇、丙酮、异丙醇和正丁醇检验.pptx VIP
原创力文档


文档评论(0)