记得,两年前在北京找工做过程当中,常常被面试官问进程在内存中是如何分布存放的,主要表现为几个段,各个段的意思是什么?以后在工做当中,特别在嵌入式工做领域当中,时不时的提到这样的问题。我想这个问题不单单我碰到,许多从事计算机行业工做的同行也遇到。今天趁有点时间,就来对进程内存分布进行一个简单的讲解,但愿对读者有帮助。面试
进程的内存分布,大致分为:代码段,数据段,堆段,栈段和其它段,具体以下图所示:数据结构
图:进程内存分布函数
咱们自底向上的方式进行讲解:blog
1. 代码段:主要是程序的代码以及编译时静态连接进来的库。这段内存大小在程序运行以前就已经肯定,并且是只读,可能存在一些常量,好比字符串常量。进程
2. 数据段:分为data和bss两个段,表现为静态内存段,data段存放已初始化的全局变量(静态内存分配的变量和初始化全局变量)。bss段存放未初始化的全局变量,在内存中bss段被清零。内存
3. 堆 段:用于程序动态内存分配和管理,如何分配和管理由程序的开发者决定,大小不固定(跟您的机器内存有关系),能够动态伸缩。开发
4. 映射段:该内存区域存放连接其它动态程序库的向量,共享内存映射向量等等。字符串
5. 栈 段:栈是一种先进后出的数据结构,该段内存区域由程序在运行中自行管理,如:局部变量保存和撤除、函数调用相关等。编译
6. 输入的环境变量和参数段:主要内存程序执行时的环境变量,输入参数等等。变量
7. 就是系统区域。
终上所述,咱们根据图中的7个部分自底向上的进行简单的讲解,各个段存放的数据和做用相信读者也有了底,祝你生活愉快,妹子大大的有,妹子嘛劝你仍是专注一个好男人吧,省得吃亏!