效用中内存分配策略的实例分析

技术Utility中内存分配策略的示例分析这篇文章主要为大家展示了“Utility中内存分配策略的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Utility中内存分

本文主要展示“实用程序中内存分配策略的实例分析”,简单易懂,条理清晰,希望能帮你解开疑惑。让边肖带领大家学习和研究文章《效用中的内存分配策略实例分析》。

从系统内存池(即堆)分配内存主要使用ANSI定义的这些函数,typedofensindingsize _ t;void * malloc(size _ tnBytes);void*calloc(size_telemNum,size _ telemSize);void*realloc(void*pBlock,size _ tnewSize);无空隙(void * ptr);

VxWorks还实现了一个与calloc()特别匹配的cf REE()typedefinet _ Vx _ STatus;typedef _ Vx _ STATUSSTATUSstatus free(char * pBlock);

堆中存储的内存块是如何管理的?

在Vx5中使用的策略是First Fit,可以翻译为第一种分配算法。在这种策略下,所有的空闲存储块从最低到最高地址排列。当需要申请内存时,从低位地址开始搜索,分配第一个满足需求的内存块。因此,当系统申请内存次数较多时,低位地址会留下大量的小内存,导致后期搜索时间略长。大致代码如下

void*memXxxAlloc(PART_IDpartId,/* memory partitionto allocatefrom */unsignednBytes,/* number of bytes allocate */unsignedalignment/* boundaryto alignto */){ 0.DL _ NODE * pNode=DLL _ FIRST(partId-freeList);while(pNode!=NULL){/* fitsif : *-blocksizerequestedsize extroom for alignmentor,*-blockisalreadyaignedandedxactlyrightsize */if((NODE _ TO _ HDR(pNode)-nWordsnWordsExtra)| |((NODE _ TO _ HDR(pNode)-nWords==nWords)

nbsp;      (ALIGNED (HDR_TO_BLOCK(NODE_TO_HDR(pNode)), alignment))))            break;        pNode = DLL_NEXT (pNode);        }    ...    }

而到了Vx6&7,用的策略是
 Best Fit,可以翻译为最优分配算法。在这种策略下,所有的空闲内存块按照尺寸从小到大排列,并使用AVL(平衡二叉树)维护。当需要申请内存时,从Root节点开始查找,满足需求且尺寸最小的内存块被分配。这种算法会保留大的内存块,提高了整体的分配成功几率,但会多出一些非常小的碎片,不过时间复杂度只有o(ln(N))。大致代码如下
AVLU_NODE *avlXxxGet    (    AVLU_TREE root, /* root node pointer */    UINT      key   /* search key */    )    {    AVLU_NODE *pNode;    AVLU_NODE *pSuccessor;    pNode = root;    pSuccessor = NULL;    while (pNode != NULL)        {        if (key >= pNode->key)            {            pNode = pNode->right;            }        else            {            pSuccessor = pNode;            pNode = pNode->left;            }        }    return (pSuccessor);    }
当然了,不管哪种策略,在释放内存时,都会自动与前后的空闲块(如果有的话)合并。否则,系统运行一会就都是碎片了。
 

计算机专业的童鞋应该知道还有一种策略叫Worst Fit,可以翻译为最差分配算法。在这种策略下,所有的空闲内存块按照尺寸从大到小排列。当需要申请内存时,要么分配第一块,要是失败。所以这种算法的分配速度最快,而且很少有小碎片,但是容易造成大块内存申请失败,所以适合待分配内存块比较统一的情况。

以上是“Utility中内存分配策略的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/155166.html

(0)

相关推荐

  • SpringBoot+Mybatis plus如何实现多数据源整合的实践

    技术SpringBoot+Mybatis plus如何实现多数据源整合的实践SpringBoot+Mybatis plus如何实现多数据源整合的实践,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方

    攻略 2021年10月22日
  • 费洛蒙香水官方网站,淘宝卖的费洛蒙香水真的有用吗

    技术费洛蒙香水官方网站,淘宝卖的费洛蒙香水真的有用吗关注【糖小姐的闺蜜圈】闺蜜美费洛蒙香水官方网站,世界才美不!你会比闺蜜更美!文末有惊喜!谢邀!
    其实,所谓的费洛蒙是人体分泌的一种信息素。也有人称为恋爱信息素,从生理学

    生活 2021年11月1日
  • linux如何修改系统参数

    技术linux如何修改系统参数这篇文章将为大家详细讲解有关linux如何修改系统参数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vi /etc/security/limits.con

    攻略 2021年11月19日
  • C#与C++哪个更强

    技术C#与C++哪个更强这篇文章主要介绍“C#与C++哪个更强”,在日常操作中,相信很多人在C#与C++哪个更强问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#与C++哪个更强”的疑惑有

    攻略 2021年11月29日
  • 十大经典排序算法

    技术十大经典排序算法 十大经典排序算法本文转载自https://www.cnblogs.com/onepixel/articles/7674659.html
    0、算法概述
    0.1 算法分类
    十种常见排序

    礼包 2021年12月14日
  • vue组件上绑定原生事件

    技术vue组件上绑定原生事件 vue组件上绑定原生事件将原生事件绑定在组件上 .native 修饰符:
    子组件
    templatediv class="demo"h2我是子组件/h2h3我是子组件中的信息

    礼包 2021年10月26日