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

技术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)

相关推荐

  • SpringSecurity原理是什么

    技术SpringSecurity原理是什么本篇内容主要讲解“SpringSecurity原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringSecurity原

    攻略 2021年10月26日
  • Python如何爬取腾讯招聘信息

    技术Python如何爬取腾讯招聘信息Python如何爬取腾讯招聘信息,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 目标目标:https

    攻略 2021年10月26日
  • 24Django装饰器整体缓存的一种玩法

    技术24Django装饰器整体缓存的一种玩法 24Django装饰器整体缓存的一种玩法一,Django设置缓存的三种类型:#将数据缓存到表里
    CACHE={'default':{'BACKEND':'d

    礼包 2021年12月6日
  • 抖音买赞自助下单平台,抖音免费点赞网站在线?

    技术抖音买赞自助下单平台,抖音免费点赞网站在线?根据抖音的热门原则,这绝对是有帮助的:在你发布了一段时间之后,将根据你的作品的播放量,点赞量,评论数量来判断你是否符合热门标准。因此,上热播放量是非常重要的。但也不是说只刷

    测评 2021年11月9日
  • 无底洞打一成语是什么成语,求几个谜底为成语的谜语!

    技术无底洞打一成语是什么成语,求几个谜底为成语的谜语!呀(打一成语)。 谜底无底洞打一成语是什么成语:唇齿相依 板(打一成语)。 谜底:残茶剩饭
    咄(打一成语)。 谜底:脱口而出
    票(打一成语)。 谜底:闻风

    生活 2021年10月28日
  • jmeter的if控制器怎么使用

    技术jmeter的if控制器怎么使用这篇文章主要介绍“jmeter的if控制器怎么使用”,在日常操作中,相信很多人在jmeter的if控制器怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

    攻略 2021年12月9日