• c++ || 内存管理


    • 单道程序设计系统:内存被分为两部分,一部分供操作系统使用(内核),一部分供当前正在执行的程序使用
    • 多道程序设计系统:在内存中细分出“用户”部分,满足多个进程的要求,细分的任务由操作系统动态完成,称为内存管理
    名称含义
    页框内存中一个固定长度的块
    一个固定长度的数据块,储存在二级存储器(如磁盘)中。数据页可以临时复制入内存中的页框中
    一个变长的数据块,储存在二级存储器中。整个段可以临时复制到内存的一个可用区域内(分段),或者可以将一个段分为多个页,将每页单独复制到内存中

    内存分区

    p

    固定分区

    分区的数目是不变

    分区大小

    pp

    1. 大小相等的分区

    缺点:
    1)程序可能太大而不能放到一个分区中
    2)内存的利用率非常低,任何程序即使很小都需要占据一个完整的分区

    内部碎片:2MB的程序换入时占据了8MB的分区,由于被装入的数据块小于分区大小,从而导致分区内部有空间浪费

    1. 大小不等的分区

    优点:
    提高了灵活性,固定分区方案相对简单
    缺点:
    分区数目在系统生成阶段已经确定,限制系统中活动(没有挂起)进程的数目
    分区大小是在系统生成阶段事先设置的,因而小作业不能有效利用分区空间

    动态分区

    分区长度和数目是可变的,当进程被装入内存中,系统会给它分配一块和它所需容量完全相等的内存空间,不多不少。

    外部碎片: 所有分区外的存储空间变成越来越多的碎片,内存利用率逐渐下降
    解决方法: 压缩 ,操作系统不时移动进程,使得进程占用的空间连续,并且所有空闲空间连成一片,压缩需要动态重定位的能力(必须能够把进程从内存的一块区域移动到另一块区域,而不会使程序中的内存访问无效)。困难是其非常费时,浪费处理器时间。

    oo

    放置算法

    1. 最佳适配:选择与要求的大小最接近的块
      优点:所产生的碎片都尽可能的小
      缺点:由于每次请求都是浪费最小的存储空间,就导致内存中产生很多很小的块,这些块不足以满足任何内存分配请求

    2. 首次适配:从头开始扫描,选择大小足够的第一个可用块
      缺点:会使内存的前端出现很多小的空闲分区,并且每次进行首次适配查找时,都要经过这些分区

    3. 下次适配:从上一次放置的位置开始扫描内存,选择下一个大小足够的可用块

    88

    固定分区限制了活动进程的数目,可用分区大小与进程大小不匹配,则导致内存的利用率非常低
    动态分区的维护复杂,并且要引入进行压缩的额外开销

    重定位

    含义
    逻辑地址指与当前数据在内存中的物理分配地址无关的访问地址,在执行对内存的访问之前必须把它转换成物理地址
    相对地址逻辑地址的一个特例,是相对于某些已知点(程序的开始处)的存储单元
    物理地址(绝对地址)数据在内存中的实际位置

    99

    分页

    优点:在内存中为每个进程浪费的空间仅仅是进程最后一页的一小部分形成的内部碎片,没有任何外部碎片

    • 内存被分成许多大小相等且很小的页框,每个进程被划分为同样大小的页,较小的进程需要较少的页,较大的进程需要较多的页,当一个进程被装入时,所有的页都被装入到可用页框中,并建立一个页表
    • 页表: 每个进程都有一个页表,页表给出进程的每一页对应的页框的位置
    • 逻辑地址(页号和偏移量)到物理地址的转换需要处理器硬件完成,并且处理器必须知道如何访问当前进程的页表。
    • 规定也得大小以及页框的大小必须是2的幂

    例:页的大小为1KB,1024字节,那么偏移量就为10位,剩下的6位为页号
    00

    分段

    逻辑地址由:段号和偏移量构成
    分段会产生外部碎片

  • 相关阅读:
    Mybaits 常用问题详解
    基于51单片机烟雾浓度检测超限报警Proteus仿真
    区块链技术在物联网中的应用:连接未来的智能世界
    微服务【RabbitMQ安装】第3章
    pyserial,win11,串口总是被占用
    20省市公布元宇宙路线图
    优化算法 - Adadelta
    【Spring】Bean作用域和生命周期
    Dephi2007以任意字符串分隔字符
    fabric.js介绍
  • 原文地址:https://blog.csdn.net/LQEmptycity/article/details/126285031