进程的内存分布

引言

  记得,两年前在北京找工作过程中,经常被面试官问进程在内存中是如何分布存放的,主要表现为几个段,各个段的意思是什么?之后在工作当中,特别在嵌入式工作领域当中,时不时的提到这样的问题。我想这个问题不仅仅我碰到,许多从事计算机行业工作的同行也遇到。今天趁有点时间,就来对进程内存分布进行一个简单的讲解,希望对读者有帮助。

进程的内存分布

  进程的内存分布,大体分为:代码段,数据段,堆段,栈段和其它段,具体如下图所示:

图:进程内存分布

  我们自底向上的方式进行讲解:

  1. 代码段:主要是程序的代码以及编译时静态链接进来的库。这段内存大小在程序运行之前就已经确定,而且是只读,可能存在一些常量,比如字符串常量。

  2. 数据段:分为data和bss两个段,表现为静态内存段,data段存放已初始化的全局变量(静态内存分配的变量和初始化全局变量)。bss段存放未初始化的全局变量,在内存中bss段被清零。

  3. 堆  段:用于程序动态内存分配和管理,如何分配和管理由程序的开发者决定,大小不固定(跟您的机器内存有关系),可以动态伸缩。

  4. 映射段:该内存区域存放链接其它动态程序库的向量,共享内存映射向量等等。

  5. 栈  段:栈是一种先进后出的数据结构,该段内存区域由程序在运行中自行管理,如:局部变量保存和撤除、函数调用相关等。

  6. 输入的环境变量和参数段:主要内存程序执行时的环境变量,输入参数等等。

  7. 就是系统区域。

总结

  终上所述,我们根据图中的7个部分自底向上的进行简单的讲解,各个段存放的数据和作用相信读者也有了底,祝你生活愉快,妹子大大的有,妹子嘛劝你还是专一一个好男人吧,免得吃亏!

posted @ 2016-07-29 15:04  Joke-Shi  阅读(2626)  评论(1编辑  收藏  举报