内存分区与具体介绍:

1. 内存分区图:

2. 分区介绍:

2.1. 栈区:

存放:临时的局部变量、函数的传参

特点:占用内存小,速度快

          数据的存储和释放采用栈式结构,先入后出,类似于C++下类的构造析构函数

2.2. 堆区:

存放:程序员malloc、new的动态内存变量

特点:

  1. 内存空间较栈来说相当大,但运行速度相比栈慢
  2. 采用链式结构连接空闲的内存碎片
  3. 动态申请的内存由程序员操作释放(free、delete),除此之外在程序结束时或关机的情况下申请内存才会被收回,否则将出现严重的内存泄露事故

2.3. 可读写区:

存放:静态变量和全局变量

已初始化的处于data区;未初始化的数据处于bss区;

特点:结束后由系统收回

2.4. 只读区:

存放:常量、程序编译过的可执行二进制代码

特点:在程序运行的时候数据不允许被修改

3. 栈和堆的比对:

堆:

栈:

由程序员自行申请分配,速度较慢

由系统自动分配内存空间,速度较快

使用结束后,需要人为释放申请的内存,避免内存泄漏

关机或者程序关闭时,内存才会被释放

在函数的生命周期结束后,由系统自动收回

在Windows系统中,链式结构由地址向高地址延申

在Windows系统中,栈式结构由地址向低地址延申

不连续的内存区域

堆的获取空间受限于操作系统的虚拟内存空间

是一块连续固定大小的内存空间:规定栈的大小为2M

可获取空间较灵活,可以获取较大空间

可以获取的栈空间较小,申请过大空间产生栈溢出的错误

4. 虚拟内存:

  1. 虚拟内存是计算机系统内存管理的一种技术。当系统物理内存不够使用时,将硬盘上的部分空间当做内存(RAM)使用,使得计算机可以运行更多的应用程序。
  2. Windows系统中,虚拟内存在硬盘上是为一个比较大的文件,文件大小即虚拟内存的大小,文件名是PageFile.Sys
  3. 虚拟内存并不是备用内存

5. 备用内存:

  1. 备用内存,备用内存本来是空闲的内存,微软想让这部分内存也发挥作用,就把硬盘上常用的文件缓存到这里,无需从硬盘进行读取,以此提高性能。这部分缓存的内存就是备用内存。
  2. 若可用内存不足以运行新的任务,备用内存将会为新的任务释放空间。这个方案理论上是可行的,既提高了性能,也不会影响内存的使用。但问题在于,备用内存有时会占用过高不会自动释放,据说是系统很久以来便存在的Bug,至今(Win11)也没有解决。
  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值