精华内容
下载资源
问答
  • 常用的内存管理方法有哪四种
    千次阅读
    2013-10-07 21:22:12

    常见的内存管理方式有块式管理,业式管理, 段式管理, 段业式管理。

    最长用的是段业式管理。

    1) 块式管理:把主存分为一块一块的,当所需的程序片段不再主存时就分配一块主存空间,把程序load入主存,就算所需的程序片段只有几个字节也只能把这一块都分给他,造成很大的浪费,但易于管理。

    2) 业式管理:把主存分为一页一页的,每一页的空间要比一块小很多,显然这种分法的空间利用率要比块式管理高很多。

    3) 段式管理:把主存分为一段一段的,每一段的空间要比一页小很多,这种方法在空间利用率上比业式管理高很多,但有另外一个缺点:一个程序片段可能会被分为几十段,这样很多时间就会被浪费在计算每一段的物理地址上。

    4) 段业式管理:结合了段式和业式的优点。把主存先分为若干段,每个段又分成若干业。

    段业式管理每取一数据要访问3次内存:

    第一次是由段表地址寄存器段表始址后访问段表,由此取出对应段的页表在内存中的地址

    第二次则是访问页表得到所要访问的物理地址
    第三次才能访问真正需要访问的物理单元

    更多相关内容
  • 内存管理:这个是系统进程要干的活,对于不同的操作系统选用管理方式是不一样的,但是现在基本不用分区管理的 内存分配算法,大体来说分为:连续式分配 与 非连续式分配 顾名思义连续式分配就是把所以要执行的...

    内存管理:这个是系统进程要干的活,对于不同的操作系统选用哪一种管理方式是不一样的,但是现在基本不用分区管理的

    内存分配算法,大体来说分为:连续式分配 与 非连续式分配
    顾名思义连续式分配就是把所以要执行的程序 完整的,有序的 存入内存,连续式分配又可以分为固定分区分配 和 动态分区分配
    非连续式分配就是把要执行的程序按照一定规则进行拆分,显然这样更有效率,现在的操作系统通常也都是采用这种方式分配内存

    1:分区管理
    2:页式管理
    3:段式管理
    4:段页式管理:结合页式管理和段式管理来的

    在分区管理中给作业分配内存时选择哪一个分区有三种分配的策略

    参考添加链接描述

    1:首次适应算法
    2:最佳适应算法
    3:最坏适应算法
    4:邻近适应算法:又称循环首次适应算法,由首次适应法演变而成,不同之处是分配内存时从上一次查找结束的位置开始继续查找

    根据分配的时机就有了静态分配和动态分配:
    所谓动态分区分配,就是指内存在初始时不会划分区域,而是会在进程装入时,根据所要装入的进程大小动态地对内存空间进行划分,以提高内存空间利用率,降低碎片的大小。

    缓存算法:

    缓存 : 凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为缓存(Cache)。
    FIFO:(First In First Out):最先进最先出
    LRU:(Least Recently Used)::最近最少使用算法
    LFU(Least Frequently Used):最不经常使用算法

    LFU和LRU的区别

    参考添加链接描述
    两者判断的标准不一样,LFU判断的标准是频率,LRU是时间
    在这里插入图片描述
    在这里插入图片描述
    实现方法:
    在这里插入图片描述

    展开全文
  • 本文主要分享了内存管理常用的三算法,小内存管理算法、slab管理算法和memheap管理算法,介绍了各算法的意义并给出管理结构。能帮助开发者更好的理解操作系统中内存管理的方式。

    本文分享自中移OneOS公众号《内存管理》。

    根据应用程序需求和系统资源的差异,操作系统提供了不同的内存分配管理算法,分别是小内存管理算法、slab管理算法和memheap管理算法。

    小内存管理算法主要针对系统RAM空间比较少的情况,一般用于小于2MB内存空间的系统,也是使用最广泛的内存管理算法。

    slab内存管理算法则主要是在系统RAM空间比较丰富的情况,提供了一种近似内存池分配的快速算法。

    memheap算法则用于系统存在多个内存堆的情况,它可以将多个内存连接在一起,形成一个大的内存堆,应用程序使用时感知不到多个内存堆的存在。

    这几类内存堆管理算法在系统运行时只能选择其中之一或者完全不使用,他们提供给应用程序的API接口完全相同。

     小内存管理算法

    在小内存管理算法中,使用内存块的形式管理。

    每个内存块都包含一个数据头,通过数据头把内存块用双向链表的方式连接起来,不论使用块或者空闲块都在同一个链表中管理。内存块的数据头数据结构定义如下:

    struct os_heap_mem 
    { 
        os_uint16_t     magic;    /*魔数*/
        os_uint16_t     used;     /*使用标识*/
        os_size_t       prev;      /*指向前控制块的指针*/
        os_size_t       next;     /*指向后控制块的指针*/
    };  

    其中,next和prev用于双向链表的连接,magic是魔数,系统使用0x1ea0标识内存管理块的头部,同时通过该值可以检测内存非法改写的问题,如果该值变化即表示内存被非法写。used表示该内存块的分配状态。

    内存管理的表现主要体现在内存的分配与释放上,分配内存时从空闲内存指针位置开始遍历,当找到一块足够大小内存块时,根据情况进行分割,前半部分返回给调用程序使用,分割后剩余的部分继续插入链表中。

    下面举例说明申请内存的过程,空闲链表free指针指向64字节的内存块,当调用分配函数申请一个512字节的内存块时,64字节的内存不足,内存管理器开始遍历内存块,next指针指向的下一块内存头部的used为1已经被使用;查找到下一块未使用的内存并且大小为1024字节,满足请求大小,管理器使用分割功能,将申请的512字节加上12字节头部空间分成前半部分,used标记为已使用返回给应用;剩余的512字节空间,前面12字节用于数据头,剩余500字节用于数据体,used标记为0,并且插入双向链表中,如下图。

    <内存分配示意图>

     释放内存是相反的过程,内存管理器会查看前后相邻的内存块是否空闲,如果空闲则合并成一个大的空闲内存块,防止系统长时间运行后形成内存碎片。

     slab管理算法

    slab是一个缓冲型的内存池算法。slab分配器是由多个区来管理内存,每一个区对应一类占用空间大小不同的对象,系统最多支持72种对象。

    一个zone的大小在32K到128K字节之间,系统初始化时根据堆的大小自动调整。slab管理器一次最大能够分配16K的内存空间,如果超出了16K那么直接从页分配器中分配。每个zone上分配的内存块大小是固定的并且使用链表进行管理,而72种对象的zone链表则放在一个数组中统一管理,如下图。

     <slab管理结构>

    下面举例说明内存申请的过程,假设分配一个16字节的内存,slab内存分配器从zone array链表表头数组中找到对应的zone链表。如果链表为空,则向页分配器分配一个新的zone,然后从zone中返回第一个空闲内存块。如果链表非空,则链表中的第一个节点必然有空闲块存在,取相应的空闲块返回。如果分配完成后,此zone中所有空闲内存块都使用完毕,分配器会把这个zone节点从链表中删除。

    内存释放时,分配器遍历zone_array,找到内存块所在的zone节点,然后把内存块连接到zone的空闲内存块链表中。如果此时zone的空闲链表中所有内存块都已经释放,当zone链表中全空闲zone达到一定数目后,系统就会把这个全空闲的zone释放到页面分配器中去。

     memheap管理算法

    如果系统含有多个地址不连续的内存堆,前面两种管理算法就不适用,操作系统提供了memheap管理算法解决这种场景。

    如果指定使用该算法,在系统初始化时,就可以将多片不连续的内存加入memheap管理链表。当需要分配内存时,分配器首先从默认memheap中查找是否有剩余空间可用,如果有直接分配返回,如果已经不足分配则遍历链表,直到找到足够分配的memheap,从这里分配内存返回给应用。应用不需要关心从哪里分配的内存,简化了使用。

    释放内存的过程类似,遍历链表查找到内存地址所在的memheap,释放地址空间。

    内存管理接口设计如下:

    (1)初始化内存堆

     (2)分配内存块

     (3)释放内存块

     (4)重分配内存块

     (5)分配多个内存块

     (6)内存分配回调函数

     (7)内存释放回调函数

    好啦,本次内存管理的介绍就到此结束啦,各位还有什么想了解的欢迎在评论区留言交流~ 

    展开全文
  • 内存管理方法 可以简单分为: 连续分配管理机制:给程序分配一个连续的内存空间 例如:块式管理 非连续分配管理机制:给程序分配离散的内存空间 例如:段页式管理 【1】块式管理 块式管理是很久以前的内存...

    在这里插入图片描述


    内存管理方法

    可以简单分为:

    • 连续分配管理机制:给程序分配一个连续的内存空间

    例如:块式管理

    • 非连续分配管理机制:给程序分配离散的内存空间

    例如:段页式管理


    【1】块式管理

    块式管理是很久以前的内存管理方式(古老)

    块式管理将内存分类一个个连续的内存块,每个块中只能包含一个进程

    这样就导致极大的内存空间浪费,程序用不完一个块的情况

    碎片: 块中未被使用的内存空间


    【2】页式管理

    页式管理将内存分为大小相等且固定的一页一页的离散空间

    大小:页 < 块

    页式管理提高了内存利用率,减少碎片

    页式管理通过页表对应逻辑地址和物理地址

    说白了就是在块的基础上划分的更小了且不连续


    【3】段式管理

    页式管理虽然提高了内存利用率,但是每一页的内容依然混杂,没有具体的意义

    段式管理在页式管理的基础上:

    • 将内存划分成更小的段(划分力度更大)
    • 每一段由于针对具体的程序,故有了具体的意义

    例如:主程序段、子程序段、数据段、栈段……

    段式管理通过段表对应逻辑地址和物理地址


    其实,从名称上就能看出内存管理机制的发展:

    • :太大了,浪费很多内存空间(碎片)

    • :相对块划分更小,提高了内存利用率,减少了碎片,但是每一页没有具体的意义

    • :相对页划分更小,利用率更高,且每一段都有具体的意义


    【4】段页式管理

    段页式管理:结合了段式页式管理的优点,先将内存分成若干段,然后将每一段再分成若干页

    • 段与段之间是离散的
    • 段的内部是一页页的,也是离散的

    (好比写文章,主标题下的内容再划分成副标题模块……)

    展开全文
  •  电源管理集成电路包括很多类别,大致又分成电压调整和接口电路两方面。电压凋整器包含线性低压降稳压器(即LDO),以及正、负输出系列电路,此外 不脉宽调制(PWM)型的开关型电路等。因技术进步,集成电路...
  • 页式存储管理和段式存储管理 https://www.cnblogs.com/wkfvawl/p/11700301.html 内存页交换策略 https://blog.csdn.net/baidu_28312631/article/details/47414645 产生场景:程序要使用的页不存在于物理内存中,会...
  • 内存分配
  • linux内存管理

    千次阅读 2022-04-02 17:18:20
    ● 虚拟内存:内存管理的一技术,它使得应用程序认为它拥有连续的可用内存(一个连续完整的地址空间); ● 物理内存:相对于虚拟内存而言,指通过物理内存条而获得的内存空间; ● 页表:一个进程的虚拟地址到...
  • FreeRTOS五种内存管理方案比较(heap_1.c/heap_2.c/heap_3.c/heap_4.c/heap_5.c) FreeRTOS为SRAM的管理提供了五种方案。下表是五种方案的比较 heap_1.c heap_2.c heap_3.c heap_4.c heap_5.c 只申请内存...
  • IOS内存管理

    千次阅读 2018-09-05 10:49:32
    Objective-C提供了两种种内存管理方式:manual reference counting(MRC,手动引用计数器),automatic reference counting(ARC,自动引用计数)。ARC作为苹果新提供的技术,苹果推荐开发者使用ARC技术来管理内存;...
  • 内存管理实验:常用页面置换算法模拟实验

    千次阅读 多人点赞 2019-11-24 16:26:44
    通过模拟实现请求页式存储管理的几基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几基本页面置换算法的基本思想和实现过程,并比较它们的效率。 实验内容 设计一个虚拟存储区和内存...
  • 操作系统(三)——内存管理

    千次阅读 2020-11-11 16:57:06
    内存管理的功能: 内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。 地址转换:把逻辑地址转换为相应的物理地址。 内存空间的扩充:利用虚拟存储技术...
  • 操作系统——内存管理

    千次阅读 2022-03-07 08:58:44
    文章目录1 内存管理的概念1.1 内存管理的基本原理和要求1.2 覆盖与交换1.2.1 覆盖1.2.2 交换1.3 连续分配管理方式1.3.1 单一连续分配(无外部碎片,内部碎片)1.3.2 固定分区分配(无外部碎片,内部碎片)1.3.3 ...
  • Android 内存管理机制

    千次阅读 多人点赞 2018-09-03 14:41:45
    本文主要包括三大部分内容: 内存管理基础:从整个计算机领域... Android的内存管理相关知识:Android又不同于Linux,它是一个移动操作系统,因此其内存管理上也自己的特性,这一部分详细讲述Android的内存管理...
  • heap_4方案也是要定义一个全局数组ucHeap,用于当做堆内存池,其大小在FreeRTOSConfig.h中使用configTOTAL_HEAP_SIZE 来定义。heap_4方案在绝大多数情况下都优于标准库中的malloc()和free()函数。 /* Allocate the...
  • python - 内存管理

    千次阅读 2022-03-26 20:41:01
    目录 1.0 python引用机制 1.1 python动态类型 2.0 python引用计数 2.1 引用计数器原理 ...2.2 获取引用计数(getrefcount) ...3.2 三情况触发垃圾回收 3.3 分代(generation)回收 3.4 标记清除 4.0 python 缓
  • 常用linux内存管理命令

    千次阅读 2018-08-22 19:45:54
    检查是否有内存泄露情况 Java内存影像工具:jmap jmap -histo:live pid 输出指定pid存活的内存直方图  第一列,序号,无实际意义  第二列,对象实例数量  第三列,对象实例占用总内存数,单位:字节  第...
  • 操作系统内存管理

    千次阅读 2018-04-18 11:16:18
    转自https://blog.csdn.net/hguisu/article/details/5713164计算存储的层次结构:当前技术没有能够提供这样的存储器,因此大部分的计算机都一个存储器层次结构,即少量的非常快速、昂贵、易变的高速缓存(cache);...
  • 【Python】之内存管理机制

    千次阅读 2020-05-07 21:42:56
    想要了解python,就必须要了解Python的内存管理机制,不然我们就会经常踩进一些莫名其妙的坑! Python的内存管理机制共分为三部分:1、引用计数 2、垃圾回收 3、内存池机制 在了解以上三部分内容之前,我们先来了解...
  • 在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也...
  • 常用内存数据库介绍

    万次阅读 2018-07-09 23:18:55
    传统的数据库管理系统把所有数据都放在磁盘上进行管理,所以称做磁盘数据库(DRDB:Disk-Resident Database)。磁盘数据库需要频繁地访问磁盘来进行数据的操作,由于对磁盘读写数据的操作一方面要进行磁头的机械移动...
  • Java内存区域 关于这部分内容大多来源于《深入理解Java虚拟机》一书。 Java 运行时数据区域(JDK8)如下图所示: 关于上述提到的线程共享和线程隔离区域,下图做详细讲解: 程序计数器 程序计数器是一块较小的内存...
  • 存储器管理内存连续分配方式~
  • 思考一下,GTA游戏60GB,讲道理运行前应该把60GB数据放入内存,然而我的电脑只有4GB,但是为什么游戏可以正常运行?在了解内存空间的分配与回收后,我们讲下内存空间的扩充......
  • 操作系统之内存管理详解

    千次阅读 2022-04-23 13:44:15
    内存管理的功能: 内存空间的分配与回收 由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。 地址转换 在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能...
  • Android内存管理基础

    千次阅读 2021-11-09 20:49:18
    内存管理概览:https://developer.android.com/topic/performance/memory-overview 内存分配:https://developer.android.com/topic/performance/memory-management Android Studio Profiler:...
  • 本文涉及的资料全部打包放到我Github仓: GitHub - 0voice/kernel_memory_management: 总结整理linux内核的内存管理的资料,包含论文,文章...内存管理):内存与IO的交换 内存管理(五):其他工程问题以及调优 -
  • 展开全部内存管理架构:1.python的内存管理机制由两部分组成,其由PYMALLOC_DEBUG控制,在...2.python的内存管理机制可以抽象成一层次结构:最底层:操作系统提供的内存管理接口,由其实现并维护第一层:对最底层...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 385,664
精华内容 154,265
热门标签
关键字:

常用的内存管理方法有哪四种