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

技术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”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“从数据库到可视化性能分析pytho

    攻略 2021年11月26日
  • mac缩略图制作软件(mac图片编辑软件artstudiopro)

    技术电影缩略图制作工具Movie Thumbnails Maker for mac怎么用今天就跟大家聊聊有关电影缩略图制作工具Movie Thumbnails Maker for mac怎么用,可能很多人都不太了解,为了

    攻略 2021年12月24日
  • idea如何整合docker快速部署springboot应用

    技术idea如何整合docker快速部署springboot应用小编给大家分享一下idea如何整合docker快速部署springboot应用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这

    攻略 2021年10月31日
  • 运维项目记录

    技术运维项目记录 运维项目记录运维项目是一个springboot项目,有简单的前端页面。
    pom文件如下xml version="1.0" encoding="UTF-8"
    project xmlns=

    礼包 2021年10月20日
  • ZooKeeper知识点都有哪些

    技术ZooKeeper知识点都有哪些本篇文章为大家展示了ZooKeeper知识点都有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 从集中式到分布式1. 集中式集中式特点

    攻略 2021年11月12日
  • Python爬取世纪佳缘的数据是否能证明它不靠谱的示例分析

    技术Python爬取世纪佳缘的数据是否能证明它不靠谱的示例分析这期内容当中小编将会给大家带来有关Python爬取世纪佳缘的数据是否能证明它不靠谱的示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大

    攻略 2021年10月26日