嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc

嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc

ID:61499530

大小:44.50 KB

页数:6页

时间:2021-02-07

嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc_第1页
嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc_第2页
嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc_第3页
嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc_第4页
嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc_第5页
资源描述:

《嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法)链接节点的内存分配方法,其实就是一种按需分配的内存分配方法。简单一点说,就是你需要多少内存,我就给你多少内存。当然,为了把分配的内存都连起来,我们还需要对分配节点进行管理记录。就比如下面这个数据结构,[cpp]viewplaincopy1typedefstruct_MNG_NODE2{3struct_MNG_NODE*next;4unsignedintsize;5}MNG_NODE;其中,next节点记录了下面一个节点的位置,size表示了当前节点下方的内存大小。在内存初始化的时候,我们默认起始内

2、存块就是一个大节点,其中前面8个字节就是上面的内容。此时,如果需要进行内存拆分,我们就可以把一个节点拆分成两个节点,就比如这样,[cpp]viewplaincopy6pNew=(MNG_NODE*)((char*)pOld+sizeof(MNG_NODE)+pOld->size-(sizeof(MNG_NODE)+size));pNew代表了新生成的结点,pOld代表了原来的节点。为了不影响原来的节点,每次分配新节点的时候必须在内存的高端位置进行分配。这样也保证了原来节点结构和数据的连贯性。当然分配结束之后,只需要对节点的的size重新进行一下赋值就可以

3、了。[cpp]viewplaincopy7pNew->size=size;8pOld->size-=sizeof(MNG_NODE)+size;此时pOld节点会归还到pFreeList当中,而生成的pNew节点则插入到pAllocList当中。其中,pFreeList表示当前的空闲节点,pAllocList表示已分配节点。相比较而言,内存的释放就比较简单,只需要把节点找出来插入到pAllocList中即可。当然,此时如果能做一下前后节点的合并工作就更好了。不过,上面描述的步骤只是就比较重要知识点讲解了一下。在真正设计代码的过程中还需要考虑到节点的查找、

4、内存大小的判断、数据初始化、链表插入、测试用例编写等工作,步骤会稍微繁琐一下。下面我们就给出完整的代码示例。[cpp]viewplaincopy9/*************************************************10*malloc&freeinlinknodealgorithm11**************************************************/1213#include14#include1516/************************

5、*************************1*structdefinition2**************************************************/34typedefstruct_MNG_NODE5{6struct_MNG_NODE*next;7unsignedintsize;8}MNG_NODE;91011/*************************************************12*globalvariabledeclaration13************************

6、**************************/1415#defineMEM_BUFFER_LENGTH(0x1<<24)1617staticvoid*pGlbData;18staticMNG_NODE*pFreeList;19staticMNG_NODE*pAllocList;2021/*************************************************22*function:addnodeintoheadlist23**************************************************

7、/2425staticvoidadd_node_into_list_head(MNG_NODE*pNode,MNG_NODE**ppList)26{27pNode->next=*ppList;28*ppList=pNode;29}303132/*************************************************33*function:findbestfitnode34**************************************************/3536staticMNG_NODE*find_best_

8、fit_node(unsignedintsize)37{38MNG_NODE*p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。