• 进程内存分配


    栈区(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

  • 相关阅读:
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    Centos安装openjdk
    centos7安装nodejs
    Linux服务器集群性能监控之Performance Co-Pilot(PCP)部署
    asp.net(c#)网页跳转七种方法小结
    C# 获取文件名及扩展名
    C#中的 具名参数 和 可选参数
    数据契约(DataContract)
    用LINQ在集合中查询特定对象
    jQuery中append、insertBefore、after与insertAfter方法注意事项
  • 原文地址:https://www.cnblogs.com/coolYuan/p/9228739.html
Copyright © 2020-2023  润新知