• 进程的内存分布


    引言

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

    进程的内存分布

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

    图:进程内存分布

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

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

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

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

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

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

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

      7. 就是系统区域。

    总结

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

  • 相关阅读:
    javaSE一些实习问题
    java并行程序基础
    http与https协议
    mybatis-plus 狂神说笔记
    弄懂java bio 和 nio 一篇就够 !!!
    异步操作Promise
    uni-app,vue-cli3或4的跨域
    7.vue之v-on
    Linux Shell 错误: $' ': command not found错误解决
    visual studio 容器工具首次加载太慢 vsdbgvs2017u5 exists, deleting 的解决方案
  • 原文地址:https://www.cnblogs.com/Joke-Shi/p/5718447.html
Copyright © 2020-2023  润新知