CN113419858B - 一种动态内存分配方法 - Google Patents

一种动态内存分配方法 Download PDF

Info

Publication number
CN113419858B
CN113419858B CN202110734591.5A CN202110734591A CN113419858B CN 113419858 B CN113419858 B CN 113419858B CN 202110734591 A CN202110734591 A CN 202110734591A CN 113419858 B CN113419858 B CN 113419858B
Authority
CN
China
Prior art keywords
node
memory
ulen
length
header information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110734591.5A
Other languages
English (en)
Other versions
CN113419858A (zh
Inventor
叶德焰
任赋
林雅
许学泽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mingjian Xiamen Technology Co ltd
Original Assignee
Mingjian Xiamen Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mingjian Xiamen Technology Co ltd filed Critical Mingjian Xiamen Technology Co ltd
Priority to CN202110734591.5A priority Critical patent/CN113419858B/zh
Publication of CN113419858A publication Critical patent/CN113419858A/zh
Application granted granted Critical
Publication of CN113419858B publication Critical patent/CN113419858B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种动态内存分配方法,其可包括以下步骤:定义节点头信息,节点头信息包括节点的已使用长度ulen和next指针;内存初始化,将内存池初始化成仅有开始节点和末尾节点的单向链表结构;内存分配,从开始节点开始查找剩余的空间长度大于申请内存的长度的节点,找到后判断该节点的ulen是否等于0,若是,则将该节点的ulen的值改为申请内存的长度,否则在该节点后创建一个新节点,并将该节点的next指针指向新节点;内存释放,当释放内存时,若释放的是开始节点,则只要将开始节点的ulen赋值为0即可,否则只需要将的前一节点的next指针指到下一节点即可。本发明无需进行复杂运算,仅需对参数ulen和next指针进行操作,执行代码简单,效率高。

Description

一种动态内存分配方法
技术领域
本发明涉及嵌入式电子设备领域,具体地涉及一种小内存嵌入式电子设备的动态内存分配方法。
背景技术
在嵌入式电子设备中,其内存(RAM)一般都比较小。为了充分利用有限的内存空间,需要对内存进行动态分配。中国发明专利申请CN103678152A公开了小内存微型控制器零碎片的动态内存分配方法,通过内存初始化、内存分配和内存释放三个步骤,可以有效地利用内存,不产生碎片。但这种方法需要知道每个分配成功的内存单元的起始地址,结束地址和长度,并且在释放的时候,需要判断之前内存单元是否已经被释放,释放了才合并,执行代码比较复杂,效率低。
发明内容
本发明旨在提供一种动态内存分配方法,以解决上述问题。为此,本发明采用的具体技术方案如下:
一种动态内存分配方法,其可包括以下步骤:
定义节点头信息,节点头信息包括节点的已使用长度ulen和next指针;
内存初始化,将内存池初始化成仅有开始节点和末尾节点的单向链表结构,其中,开始节点的ulen=0,next指针指向末尾节点;末尾节点的next指针为空,即next=NULL;
内存分配,当申请内存时,从开始节点开始查找剩余的空间长度大于等于申请内存的长度的节点,找到后判断该节点的ulen是否等于0,若是,则将该节点的ulen的值改为申请内存的长度,否则在该节点后创建一个新节点,并将该节点的next指针指向新节点,新节点的ulen值等于申请内存的长度,next指针指向下一个节点;
内存释放,当释放内存时,若释放的是开始节点,则只要将开始节点的ulen赋值为0即可,否则只需要将该节点的前一节点的next指针指到该节点的下一节点即可。
进一步地,节点的剩余空间长度LR的计算公式为:LR=nextblock-curblock-ulen-8-8,其中,curblock表示当前节点的起始地址,nextblock表示下一节点的起始地址,第一个8表示当前节点头信息所占字节数,第二个8表示新创建的下一个节点头信息所占字节数。
进一步地,ulen和next指针的长度均为4个字节。
本发明采用上述技术方案,具有的有益效果是:无需进行复杂运算,仅需对参数ulen和next指针进行操作,执行代码简单,效率高。
附图说明
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
图1是本发明的动态内存分配方法的流程图;
图2是内存初始化的示意图;
图3是第一次内存分配的示意图;
图4是第二次内存分配的示意图;
图5是第一内存节点释放的示意图;
图6是第三内存节点释放的示意图。
具体实施方式
现结合附图和具体实施方式对本发明进一步说明。
如图1所示,一种动态内存分配方法可包括以下步骤:
100、定义节点头信息,节点头信息包括节点的已使用长度ulen和next指针。具体代码如下:
typedef struct mpool_head{
struct mpool_head*next;
INT32U ulen;/*当前块已用长度*/
}OS_MPLIST_T;
其中,ulen和next指针分别占用4个字节。也就是说,每个节点的节点头信息占用8个字节。
200、内存初始化,将内存池初始化成仅有开始节点(或第一节点)和末尾节点的单向链表结构,其中,开始节点的ulen=0,next指针指向末尾节点;末尾节点的ulen=0,next指针为空,即next=NULL,如图2所示。即,内存的最后8个字节存储next=NULL,ulen=0。假设内存长度为4096个字节,则末尾节点的起始地址为第4088个字节。
300、内存分配,当申请内存时,从开始节点开始查找剩余的空间长度大于等于申请内存的长度的节点,找到后判断该节点的ulen是否等于0,若是,即该节点是开始节点,则将该节点的ulen的值改为申请内存的长度,否则在该节点后创建一个新节点,并将该节点的next指针指向新节点,其中,新节点的ulen值等于申请内存的长度,next指针指向下一个节点。
其中,节点的剩余空间长度LR的计算公式为:LR=nextblock-curblock-ulen-8-8,其中,curblock表示当前节点的起始地址,nextblock表示下一节点的起始地址,第一个8表示当前节点头信息所占字节数,第二个8表示新创建的下一个节点头信息所占字节数。例如,当前节点的起始地址curblock=100,下一节点的起始地址nextblock=200,当前节点的已使用长度ulen=50,则LR=200-100-50-8-8=42。计算非常简单。
例如,初始化第一次分配50字节的内存时,将开始节点的ulen赋值为50,如图3所示。在此基础上进行第二次分配100个字节时,在第58个字节创建一个新节点,即新节点的起始地址为第58个字节(注:内存地址字节顺序从0开始编号),ulen赋值为100。此时,开始节点的next指针指向新节点(即,next=58),新节点的next指针指向末尾节点(即,next=4088),如图4所示。
400、内存释放,当释放内存时,若释放的是开始节点,则只要将开始节点的ulen赋值为0即可,如图5所示,否则只需要将该节点的前一节点的next指针指到该节点的下一节点即可。如图6所示,当释放的节点是第三节点时,仅需将第二节点的next指针指向第四节点即可,即,原第三节点所占用的内存变成第二节点的剩余空间长度。整个内存释放操作非常方便,无需进行任何计算,并且在释放时也不用判断是否需要进行合并,简化了代码。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。

Claims (1)

1.一种动态内存分配方法,其特征在于,包括以下步骤:
定义节点头信息,所述节点头信息包括节点的已使用长度ulen和next指针;
内存初始化,将内存池初始化成仅有开始节点和末尾节点的单向链表结构,其中,所述开始节点的ulen=0,开始节点的next指针指向末尾节点;所述末尾节点的next指针为空,即next=NULL;ulen和next指针的长度均为4个字节,所述内存池的最后8个字节用于存储所述末尾节点的ulen和next指针;
内存分配,当申请内存时,从所述开始节点开始查找剩余空间长度大于等于申请内存的长度的节点,找到后判断该节点的ulen是否等于0,若是,则将该节点的ulen的值改为申请内存的长度,否则在该节点后创建一个新节点,并将该节点的next指针指向新节点,新节点的ulen值等于申请内存的长度,next指针指向下一个节点;节点的剩余空间长度LR的计算公式为:LR=nextblock-curblock-ulen-8-8,其中,curblock表示当前节点的起始地址,nextblock表示下一节点的起始地址,第一个8表示当前节点头信息所占字节数,第二个8表示新创建的下一个节点头信息所占字节数;
内存释放,当释放任一节点的内存时,若释放的是开始节点,则将开始节点的ulen赋值为0,否则将该节点的前一节点的next指针修改为指向该节点的下一节点。
CN202110734591.5A 2021-06-30 2021-06-30 一种动态内存分配方法 Active CN113419858B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110734591.5A CN113419858B (zh) 2021-06-30 2021-06-30 一种动态内存分配方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110734591.5A CN113419858B (zh) 2021-06-30 2021-06-30 一种动态内存分配方法

Publications (2)

Publication Number Publication Date
CN113419858A CN113419858A (zh) 2021-09-21
CN113419858B true CN113419858B (zh) 2024-02-13

Family

ID=77717928

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110734591.5A Active CN113419858B (zh) 2021-06-30 2021-06-30 一种动态内存分配方法

Country Status (1)

Country Link
CN (1) CN113419858B (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101140531A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 快速申请内存的方法
EP1918822A1 (fr) * 2006-10-31 2008-05-07 Axalto SA Système et procédé d'indexation de mémoire
CN101266575A (zh) * 2007-03-13 2008-09-17 中兴通讯股份有限公司 一种提高内存池利用率的方法
CN101470665A (zh) * 2007-12-27 2009-07-01 Tcl集团股份有限公司 一种无mmu平台的应用系统内存管理的方法及系统
CN102968378A (zh) * 2012-10-23 2013-03-13 深圳市融创天下科技股份有限公司 一种内存分配和释放的方法、装置及系统
CN103678152A (zh) * 2014-01-08 2014-03-26 广州思泰信息技术有限公司 一种小内存微型控制器零碎片的动态内存分配方法
CN103984639A (zh) * 2014-04-29 2014-08-13 宁波三星电气股份有限公司 一种动态内存分配方法
CN111177017A (zh) * 2018-11-09 2020-05-19 炬芯(珠海)科技有限公司 一种内存分配方法及装置
CN112732435A (zh) * 2019-10-29 2021-04-30 浙江宇视科技有限公司 内存动态分配方法、装置、电子设备及可读存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6785888B1 (en) * 1997-08-29 2004-08-31 International Business Machines Corporation Memory allocator for a multiprocessor computer system
US9733911B2 (en) * 2015-11-11 2017-08-15 National Instruments Corporation Value transfer between program variables using dynamic memory resource mapping
US11074179B2 (en) * 2017-11-02 2021-07-27 Hewlett Packard Enterprise Development Lp Managing objects stored in memory
US11403213B2 (en) * 2019-06-28 2022-08-02 International Business Machines Corporation Reducing fragmentation of computer memory
US11307779B2 (en) * 2019-09-11 2022-04-19 Ceremorphic, Inc. System and method for flash and RAM allocation for reduced power consumption in a processor

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1918822A1 (fr) * 2006-10-31 2008-05-07 Axalto SA Système et procédé d'indexation de mémoire
CN101266575A (zh) * 2007-03-13 2008-09-17 中兴通讯股份有限公司 一种提高内存池利用率的方法
CN101140531A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 快速申请内存的方法
CN101470665A (zh) * 2007-12-27 2009-07-01 Tcl集团股份有限公司 一种无mmu平台的应用系统内存管理的方法及系统
CN102968378A (zh) * 2012-10-23 2013-03-13 深圳市融创天下科技股份有限公司 一种内存分配和释放的方法、装置及系统
CN103678152A (zh) * 2014-01-08 2014-03-26 广州思泰信息技术有限公司 一种小内存微型控制器零碎片的动态内存分配方法
CN103984639A (zh) * 2014-04-29 2014-08-13 宁波三星电气股份有限公司 一种动态内存分配方法
CN111177017A (zh) * 2018-11-09 2020-05-19 炬芯(珠海)科技有限公司 一种内存分配方法及装置
CN112732435A (zh) * 2019-10-29 2021-04-30 浙江宇视科技有限公司 内存动态分配方法、装置、电子设备及可读存储介质

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
AVR单片机实时系统内存分配算法的研究;王家亮;赵海;潘荣;蔡鹏华;;东北大学学报(自然科学版)(第05期);全文 *
DYNAMIC NETWORK RANGE-ADJUSTED MEASURE VS. DYNAMIC NETWORK SLACKS-BASED MEASURE;Avkiran Necmi Kemal;McCrystal Alan;Journal of the Operations Research Society of Japan;第57卷(第1期);全文 *
FPGA range fills gap in Lattice portfolio.;Electronics Weekly(第2203期);全文 *
提高堆数据局部性的动态池分配技术;王振江;武成岗;张兆庆;;计算机学报(第04期);全文 *
无线传感网络节点内存管理机制的研究与设计;蒋林林;刘峰;;电子器件(第05期);全文 *

Also Published As

Publication number Publication date
CN113419858A (zh) 2021-09-21

Similar Documents

Publication Publication Date Title
KR100528278B1 (ko) 데이터 블록들을 압축하여 메모리를 관리하는 방법
EP2175370B1 (en) System and method of using pooled thread-local character arrays
US6286016B1 (en) Incremental heap expansion in a real-time garbage collector
JP4511653B2 (ja) マルチスレッド仮想マシン内におけるメモリ・アロケーションの方法及び装置
US5339431A (en) Software compiler and linker with improved line-number table
US8069330B2 (en) Memory management system for reducing memory fragmentation
JP2005108216A (ja) 客体志向プログラムの動的メモリ管理方法及び装置
JPH08237138A (ja) 圧縮装置および圧縮方法
GB2386715A (en) Method for the use of a stack in a Java accelerator device
JP2007535241A (ja) 条件付で実行可能モジュールを縮小するシステムおよび方法
US9734620B2 (en) Apparatus and method for graphics state management
CN113419858B (zh) 一种动态内存分配方法
US5832507A (en) Method and apparatus for converting ASCII path names to parsed path name structures
WO2002091176A2 (en) Frameworks for accessing java class files
EP1489518B1 (en) Embedded garbage collection
US6009272A (en) Register allocation via selective spilling
EP1386231B1 (en) Partial loading of class files into virtual machines
CN109446198A (zh) 一种基于双数组的trie树节点压缩方法及装置
JP4041347B2 (ja) ガベージコレクション装置及びガベージコレクション方法
US20050021929A1 (en) Micro controller for processing compressed codes
KR101670916B1 (ko) 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치
CN104657131B (zh) 一种软件安装包的生成系统和方法
US6535969B1 (en) Method and apparatus for allocating free memory
WO2003012637A2 (en) Two tier clusters for representation of objects in java programming environments
CN108428195B (zh) 一种吊装顺序设置方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant