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

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

Info

Publication number
CN113419858A
CN113419858A CN202110734591.5A CN202110734591A CN113419858A CN 113419858 A CN113419858 A CN 113419858A CN 202110734591 A CN202110734591 A CN 202110734591A CN 113419858 A CN113419858 A CN 113419858A
Authority
CN
China
Prior art keywords
node
memory
ulen
length
next pointer
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.)
Granted
Application number
CN202110734591.5A
Other languages
English (en)
Other versions
CN113419858B (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

Images

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 (3)

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

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205304A1 (en) * 1997-08-29 2004-10-14 Mckenney Paul E. Memory allocator for a multiprocessor computer system
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 宁波三星电气股份有限公司 一种动态内存分配方法
US20170131984A1 (en) * 2015-11-11 2017-05-11 National Instruments Corporation Value Transfer between Program Variables using Dynamic Memory Resource Mapping
US20190129845A1 (en) * 2017-11-02 2019-05-02 Hewlett Packard Enterprise Development Lp Managing objects stored in memory
CN111177017A (zh) * 2018-11-09 2020-05-19 炬芯(珠海)科技有限公司 一种内存分配方法及装置
US20200409833A1 (en) * 2019-06-28 2020-12-31 International Business Machines Corporation Reducing fragmentation of computer memory
US20210072906A1 (en) * 2019-09-11 2021-03-11 Redpine Signals, Inc. System and Method for Flash and RAM allocation for Reduced Power Consumption in a Processor
CN112732435A (zh) * 2019-10-29 2021-04-30 浙江宇视科技有限公司 内存动态分配方法、装置、电子设备及可读存储介质

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040205304A1 (en) * 1997-08-29 2004-10-14 Mckenney Paul E. Memory allocator for a multiprocessor computer system
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 宁波三星电气股份有限公司 一种动态内存分配方法
US20170131984A1 (en) * 2015-11-11 2017-05-11 National Instruments Corporation Value Transfer between Program Variables using Dynamic Memory Resource Mapping
US20190129845A1 (en) * 2017-11-02 2019-05-02 Hewlett Packard Enterprise Development Lp Managing objects stored in memory
CN111177017A (zh) * 2018-11-09 2020-05-19 炬芯(珠海)科技有限公司 一种内存分配方法及装置
US20200409833A1 (en) * 2019-06-28 2020-12-31 International Business Machines Corporation Reducing fragmentation of computer memory
US20210072906A1 (en) * 2019-09-11 2021-03-11 Redpine Signals, Inc. System and Method for Flash and RAM allocation for Reduced Power Consumption in a Processor
CN112732435A (zh) * 2019-10-29 2021-04-30 浙江宇视科技有限公司 内存动态分配方法、装置、电子设备及可读存储介质

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
"FPGA range fills gap in Lattice portfolio.", ELECTRONICS WEEKLY, no. 2203 *
AVKIRAN NECMI KEMAL;MCCRYSTAL ALAN: "DYNAMIC NETWORK RANGE-ADJUSTED MEASURE VS. DYNAMIC NETWORK SLACKS-BASED MEASURE", JOURNAL OF THE OPERATIONS RESEARCH SOCIETY OF JAPAN, vol. 57, no. 1 *
王家亮;赵海;潘荣;蔡鹏华;: "AVR单片机实时系统内存分配算法的研究", 东北大学学报(自然科学版), no. 05 *
王振江;武成岗;张兆庆;: "提高堆数据局部性的动态池分配技术", 计算机学报, no. 04 *
蒋林林;刘峰;: "无线传感网络节点内存管理机制的研究与设计", 电子器件, no. 05 *

Also Published As

Publication number Publication date
CN113419858B (zh) 2024-02-13

Similar Documents

Publication Publication Date Title
JP4684607B2 (ja) オブジェクト指向プログラムの動的メモリ管理方法及び装置
KR100528278B1 (ko) 데이터 블록들을 압축하여 메모리를 관리하는 방법
JP2610084B2 (ja) データ伸長方法および装置ならびにデータ圧縮伸長方法および装置
CN108038002B (zh) 一种嵌入式软件内存管理方法
JP2571664B2 (ja) コンピュータ主記憶域管理システムおよび方法
US8510710B2 (en) System and method of using pooled thread-local character arrays
JP3298894B2 (ja) 即時辞書更新がストリング探索とインターリーブされたデータ圧縮解凍システム
KR20120134916A (ko) 저장 장치 및 저장 장치를 위한 데이터 처리 장치
CN110704330B (zh) 数据存取控制装置及方法
US7492953B2 (en) Efficient method and system for reducing update requirements for a compressed binary image
JP2007535241A (ja) 条件付で実行可能モジュールを縮小するシステムおよび方法
JP2007535241A5 (zh)
JP2001202253A (ja) データ処理方法およびデータ処理装置
US7817154B1 (en) Graphics system with state transition caching
JPH09204297A (ja) 複数のヒープにおいて順序を維持してメモリ割り当てを行うための装置および方法
US5832507A (en) Method and apparatus for converting ASCII path names to parsed path name structures
US9734620B2 (en) Apparatus and method for graphics state management
JP2007226583A (ja) ポインタの圧縮・伸張方法、これを実行するプログラム、及び、これを用いた計算機システム
US6657564B2 (en) Method and apparatus for compressing data in which dictionary sizes are reduced
CN113419858A (zh) 一种动态内存分配方法
US7162712B2 (en) Method and apparatus for creating string objects in a programming language
US6871274B2 (en) Instruction code conversion apparatus creating an instruction code including a second code converted from a first code
US5642514A (en) Method and system for constructing compact executable files by eliminating redundant debugging strings
US7065751B2 (en) Program execution device operating based on compressed code
JP7034296B2 (ja) 同時コピー・ガベージ・コレクションのためのコピーおよび転送

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