- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统内核原理和开发(最快、最优、最差内存分配算法)
前面我们说到了基于链表的内存分配算法。但是之前我们也说过,其实内存分配一般有三个原则,最快、最优和最差。最快比较好理解,就是寻找到合适的节点就立即分配内存,我们在前面一篇博客采用的就是这个方法。最优呢,就是寻找可以满足当前内存分配的最小节点,这样不会有很大的浪费,但是有可能会产生碎片节点。最后一种就是最差分配算法,说是最差效果未必最差。因为在大的内存分配的时候至少不会很快产生内存碎片,对整个系统的稳定来说有可能是好事。所以这三种方法很难说哪一种好,哪一种不好,需要结合具体的应用场景客观进行分析。不过话说回来,内存碎片是无论如何都避免不了的。
首先,为了灵活对这三种分配算法进行配置,我们定义了宏开关,需要哪个就把那个开关放开。暂时默认打开的算法的是最快分配算法。
[cpp] view plaincopy
#define MAX_SPEED_MALLOC 1
#define MIN_SIZE_MALLOC 0
#define MAX_SIZE_MALLOC 0
因为之前已经讨论过最快分配算法,所以这里着重讨论的最优分配算法和最差分配算法。又由于两者的差别极小,所以单独分析其中一种算法也行。就拿最优分配算法来说,为了寻找到最小的节点,我们需要对整个链表进行遍历,这个还是比较消耗时间的。
[cpp] view plaincopy
while(pCur)
{
if(pCur-size (size + sizeof(MNG_NODE)))
{
if(NULL == pFind || pFind-size pCur-size)
{
pFind = pCur;
}
}
pPre = pCur;
pCur = pCur-next;
}
寻找到pFind这个我们需要的节点之后,还需要从pFreeList中删除该节点。所以,我们需要进一步的判断和分析,
[cpp] view plaincopy
if(NULL == pFind)
return NULL;
pPre = find_previous_node_in_list(pFind, pFreeList);
if(NULL == pPre)
pFreeList = pFreeList-next;
else
pPre-next = pFind-next;
return pFind;
首先判断pFind前面有没有节点,如果没有表示pFreeList就是pFind,那么pFreeList需要自行向后退缩;当然如果当前的pFind节点是有前节点的,那么只需要把前节点的next指针重新更改一下即可。当然,这里还对原来的查找节点函数作了一下修改,使之更合理更通用。
[cpp] view plaincopy
/*************************************************
* function: find previous node
**************************************************/
MNG_NODE* find_previous_node_in_list(MNG_NODE* pNode, MNG_NODE* pList)
{
MNG_NODE* pFind = pList;
MNG_NODE* pPre = NULL;
while(pFind pFind != pNode)
{
pPre = pFind;
pFind = pFind-next;
}
if(NULL == pFind)
return NULL;
return pPre;
}
上面也只是说了个大概,具体的内容可以参见下面的源代码。既可以在VC上编译,也可以在GCC上面编译,都没有问题。当然,如果本地os没有编译器,可以选择网上在线编译,也是个不错的选择。
[cpp] view plaincopy
/*************************************************
* malloc free in link node algorithm
***********
您可能关注的文档
- 2013理科数学圆锥曲线(教师).doc
- 2013元月初三语文调考试卷.doc
- 2014高二级期中理科数学-(下)及其答案.doc
- 2014高考数学总复习精品资源19、圆锥曲线).doc
- 2014高考政治大一轮复习第九课一切从实际出发第十八节世界是客观存在的物质世界.ppt
- 2014哈尔滨市第三中学第二次高考模拟考试.doc
- 2014届高考地理(人教版)一轮复习教学案:必修1第一章行星地球第3讲地球的公转及地理意义.doc
- 2014届高考物理一轮复习全程测控:电荷的相互作用、电场力的性质.doc
- 2014届新课标高考总复习·化学--章末归纳整合1专题1-平均摩尔质量(或相对分子质量)的求算方法.ppt
- 2014最强最新最全务员面试题型.doc
最近下载
- 北师大版八年级数学上册 1.1 探索勾股定理 同步测试(附答案解析).docx VIP
- 冀少版七年级上册生物全册新质教学课件(配2024年秋改版教材).pptx
- 卫生间改造施工组织设计.pdf VIP
- 《结构吊装施工》.pdf VIP
- 2025年中考数学押题:几何图形选填压轴题(含答案).pdf VIP
- 小学英语群文阅读:No Pain, No Gain 教学设计 PPT课件.pptx VIP
- 氢气管线吹扫试压方案.docx VIP
- 正余弦函数的图像和性质导学案.doc VIP
- 2021新教材必修第一册完美题型精讲(同步学习培优120个题型完美讲解).pdf VIP
- 美术五年级上册人美版 第2课 画人像(课件)(14ppt).pptx VIP
文档评论(0)