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

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

相关推荐

  • python内置函数中的均值函数在哪(python中计算数量的函数)

    技术Python矩与矩生成函数是什么本篇内容主要讲解“Python矩与矩生成函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python矩与矩生成函数是什么”吧!斜度

    攻略 2021年12月21日
  • mean什么意思,whatimean什么意思

    技术mean什么意思,whatimean什么意思what i mean我的意思双语对照例句:1.Fishermen will know what I mean. 爱钓鱼的人知道我的意思mean什么意思。 2.Saves

    生活 2021年10月29日
  • 装饰器

    技术装饰器 装饰器装饰器
    1.形式装饰器是有python 的@语法和闭包的知识结合使用的常见的装饰器形式
    def outer(origin):def inner():'''你猜'''print("啊哈哈

    礼包 2021年11月29日
  • Vue 全家桶介绍-超详细教程

    技术Vue 全家桶介绍-超详细教程 Vue 全家桶介绍-超详细教程Vue 全家桶介绍-超详细教程Vue 全家桶介绍Vue有著名的全家桶系列,包含了vue-router(http://router.vue

    礼包 2021年10月27日
  • 什是多音字吗,帮忙找多音字……要多.

    技术什是多音字吗,帮忙找多音字要多.补bu(修补) piao(姓) 乐le(快乐) yue(喜悦) 行hang(行情) xing(行走) 系 xi(关系) ji(系鞋带) 应ying(四声)应用 ying(应该) 长 z

    生活 2021年10月22日
  • MySQL 5.7如何使用GTID方式搭建复制环境

    技术MySQL 5.7如何使用GTID方式搭建复制环境这篇文章主要为大家展示了“MySQL 5.7如何使用GTID方式搭建复制环境”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下

    攻略 2021年11月3日