zoukankan      html  css  js  c++  java
  • 进程内存分配

    栈区(stack)

      由编译器自动分配和释放,存放函数的参数值,局部变量的值等。其他操作类似于数据结构中的栈。

    堆区(heap)

      一般有程序员分配和释放,若程序员不释放,程序结束后可能有OS回收。它和数据结构中的堆不是一回事,分配方式类似于链表。

    全局区(静态区static)

      全局变量和静态变量存储在这一区域,初始化的全局变量和静态变量在这一区域,未初始化的全局变量和未初始化的静态变量在相邻的另一区域。程序结束后由系统释放。

    文字常量区

      常量字符串存放在这一区域。程序结束后由系统释放。

    程序代码区

      存放函数体的二进制代码。

    进程内存分配图

    高地址

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    低地址

    段区名

    解释

    内容

    stack

    栈:局部变量

    1、在函数内部定义的局部变量(非static型)

    2、中断发生时存放的运行环境

    room

    增长空间:堆向上长,栈向下长

    堆和栈动态变化的空间,

    1、堆从低地址向上动态增长

    2、栈从高地址向下动态增长

    heap

    堆:动态分配的内存空间

    1、程序运行时动态分配的空间,如malloc函数,new等

    2、动态释放,如free函数,delete等

    other

    其他

    .bss

    未初始化的全局变量区

    函数外部定义的(全局变量),如

    1、   int I;

    2、   static int j;

    .data

    已初始化的全局变量区

    1、函数外定义的:static int i = 0;

    2、函数内部定义的:static int j;//编译器自动初始化为0

    .text

    可执行文件

    1、程序代码,即当前CPU的二进制机器码

    2、常量,如const char msg[]=”hello world ”

    注:

      1、单片机,可执行文件一般没必要加载到内存中,也就不存在.text段。

      2、对于多任务系统来说,一个进程的内存分配往往是动态的,因此堆区实际地址空间可能不连续。

      3、栈区作为存放局部变量的区域,往往可以设置其最大大小,运行时超出定义大小则会产生越界错误(段错误的一种)。

      4、text段在内存中映射为只读,data和bss是可读可写的。

      5、data段和bss段属于静态内存分配。data是初始化过的,bss是未初始化的。

      6、stack保存在函数的局部变量(不包含static声明的变量)、参数以及返回值。

      7、传入的参数和局部变量都在栈顶分布,随着子函数的增长向下增长。

      8、函数的调用地址(函数运行代码),全局变量,静态变量分配载内存的低地址上,而malloc分配的堆在这些内存之上,并向上增长。

           unix系统进程内存占用示意图

     

                代码段内容表

    参考:

      https://blog.csdn.net/hitman_cs/article/details/70599071

      https://blog.csdn.net/qq792326645/article/details/49783347

      https://blog.csdn.net/love_gaohz/article/details/41310597

  • 相关阅读:
    第九周学习进度总结
    SLR(1)语法分析(JAVA实现)
    算符优先分析
    第八周学习进度总结
    Android 自学之相对布局 RelativeLayout
    Android 自学之表格布局 TableLayout
    Android 自学之线性布局 LinearLayout
    Android 自学之帧布局 FrameLayout
    机器学习进度05(FaceBook案例)
    机器学习进度04(转换器、预估器、K-近邻算法、模式选择与调优)
  • 原文地址:https://www.cnblogs.com/coolYuan/p/9228739.html
Copyright © 2011-2022 走看看