内存的堆栈分析

一般说到内存指的是计算机的随机存储器(RAM),程序都是在这里面运行。
计算机内存的大致划分如下:
1:内存地址由上倒下依次增加

2:内存由上倒下依次分为以下几块:

内核虚拟内存:用户代码不可见的内存,地址空间顶部的区域,是为内核保留的。

: 维护虚拟地址的空间顶部是用户栈,编译器用它来实现函数调用。
  每次调用一个函数时栈会增长(方法中涉及大量的几部变量),
  从函数返回时栈会收缩。
  存储运行时的局部变量及const局部变量
  栈是连续的lifo(后进先出)的存取方式,地址从上到下逐渐增加。

共享库:大约在地址空间的中间部分,是一块用来存放标准库和数学库这样的共享库代码和数据的区域。
    如:printf函数等...

:运行时有malloc创建的运行时的堆。
  存放程序员申请的内存空间,如 new Array()
  堆是树状结构的无序的存储数据的方式。

程序代码和数据区:包括读/写数据和只读的代码和数据,对所有的进程来说,代码是从同一固定地址开始,
          紧接着的是和C全局变量相对应的数据位置。代码和数据区是直接按照可执行目标文件的
          内容初始化的。
        可读写区用于存储全局变量和静态变量 的数据
        只读区 存储代码
        可读写区用于存储用户的数据:地址连续存储

原文地址:https://www.cnblogs.com/show58/p/12396217.html