CN1851676A - 一种嵌入式系统缓冲式内存分配方法 - Google Patents
一种嵌入式系统缓冲式内存分配方法 Download PDFInfo
- Publication number
- CN1851676A CN1851676A CNA2006100516260A CN200610051626A CN1851676A CN 1851676 A CN1851676 A CN 1851676A CN A2006100516260 A CNA2006100516260 A CN A2006100516260A CN 200610051626 A CN200610051626 A CN 200610051626A CN 1851676 A CN1851676 A CN 1851676A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- buffer
- pool
- block
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 77
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000003139 buffering effect Effects 0.000 claims abstract description 29
- 238000013523 data management Methods 0.000 claims abstract description 3
- 238000007726 management method Methods 0.000 claims description 5
- 238000011084 recovery Methods 0.000 claims description 5
- 238000013461 design Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Computer And Data Communications (AREA)
- Memory System (AREA)
Abstract
本发明涉及嵌入式系统内存分配策略领域,旨在提供一种嵌入式系统缓冲式内存分配方法。该方法包括定义数据块缓冲池数据管理器的结构、设计内存块缓冲池管理器的步骤、缓冲式内存分配过程和缓冲式内存释放过程的步骤。在本发明中,采用了一种嵌入式系统缓冲式内存分配方法,该方法利用数据块缓冲池,将已经分配的内存置入到数据块缓冲池中,而不是立即由系统回收,由于操作系统分配内存、释放内存的系统调用的消耗很大。通过本发明的方法可以在数据缓冲池中直接使用空闲数据单元,直到需要时才调用系统内存分配调用,这样就能够有效的避免过多调用操作系统内存分配、内存释放的系统调用,从而提高系统的效率。
Description
技术领域
本发明涉及到嵌入式系统内存分配策略领域,特别是涉及一种嵌入式系统缓冲式内存分配方法。
背景技术
随着嵌入式系统的发展,嵌入式系统的内存分配机制的研究也越来越重要。很多时候,内存的分配机制是影响程序运行效率的一个关键要素,所以这方面的问题一直以来都是嵌入式领域研究的重点。虽然在内存分配机制上已经有了很多方法和相关理论,但还是有许多需要完善的地方,还需要不断地研究和探索。
内存分配机制是嵌入式系统研究中的一个重点和难点的问题,因为它必须满足一些特性,这些特性是嵌入式系统所必须的,这是难点所在。以下是必须满足的特性:
(1)实时性。从实时性的角度出发,要求内存分配过程要尽可能地快。因此,在嵌入式系统中,不可能采用通用操作系统的一些复杂而完善的内存分配策略,一般没有段页式的虚存管理机制;而是采用简单、快速的内存分配方案,其分配方案也因程序对实时性的要求而异。
(2)可靠性。嵌入式系统应用的环境千变万化,在有些特定情况下,对系统的可靠性要求极高,内存分配的请求必须得到满足,如果分配失败则可能会带来灾难性的后果。特别是在一些交通工具上,如果系统出现故障,那么结果是不可想象的。
(3)高效性。内存分配要尽可能地减少浪费。不可能为了保证满足所有的内存分配请求而将内存配置得很大。一方面,嵌入式系统对成本的要求使得内存在其中只是一种很有限的资源;另一方面,即使不考虑成本的因素,系统硬件环境有限的空间和有限的板面积决定了可配置的内存容量是很有限的。
以上的限制条件对嵌入式系统内存分配机制提出的很大的挑战,现今存在的很多内存分配机制中很少有符合以上条件的。
总体上说,现今有两种内存分配机制:一是静态分配,静态分配是指在编译或链接时将程序所需的内存空间分配好。采用这种分配方案的程序段,其大小一般在编译时就必须确定,因此有很大的局限性。二是动态分配,动态分配是指系统运行时根据需要动态地分配内存。动态分配的缺点是过多的分配操作影响程序效率。在本发明中,采用了一种嵌入式系统缓冲式内存分配方法,该方法利用数据块缓冲池,将已经分配的内存置入到数据块缓冲池中,而不是立即由系统回收,由于操作系统分配内存、释放内存的系统调用的消耗很大。通过本发明的方法可以在数据缓冲池中直接使用空闲数据单元,直到需要时才调用系统内存分配调用,这样就能够有效的避免过多调用操作系统内存分配、内存释放的系统调用,从而提高系统的效率。
发明内容
本发明的目的在于克服现有技术中的不足,提供一种嵌入式系统缓冲式分配方法。
本发明解决其技术问题采用的技术方案如下:
嵌入式系统缓冲式内存分配方法包括以下步骤:
(1)定义数据块缓冲池数据管理器的结构:
包含定义数据单元尺寸、数据块尺寸、最多可容纳的数据块数、已使用掉的块数、块指针数组和空闲数据链表的信息内容;
(2)设计内存块缓冲池管理器的步骤:包括
创建数据块管理器,参数包括内存指针(null时表示自己分配)、块尺寸、单元尺寸和返回缓冲池管理器指针;
解构数据块管理器,释放其所分配的所有内存,调用者负责外部内存的释放,参数为数据块缓存池结构,并返回成功失败标志;
从数据块缓冲池中分配1个单元,参数为数据块缓冲池结构,返回数据单元指针;
数据单元释放,释放1个数据单元,返回数据块缓冲池结构,不对1个单元释放2次,参数为数据块结构和单元指针;
(3)缓冲式内存分配过程:
程序需要分配内存单元时,系统首先检测缓冲池,如果缓冲池中有空闲的数据块或数据单元,则取得此数据单元的实际地址,并将该单元从空闲链表中删除;如果缓冲池中没有可用数据单元则调用系统内存分配调用为缓冲池增加分配单元,然后从缓冲池中分配;
(4)缓冲式内存释放过程:
程序释放内存时,首先检测缓冲池中是否还有空间容纳回收的内存单元,如果有,则将内存单元地址链接到内存单元空闲链表中;如果没有空间则另建立一个缓存池,然后将回收的内存单元地址链接到缓冲池的空闲链表中。
作为本发明的一种改进,所述步骤(2)中内存指针为null时表示自己分配。
本发明与背景技术相比,具有的有益的效果是:
在本发明中,采用了一种嵌入式系统缓冲式内存分配方法,该方法利用数据块缓冲池,将已经分配的内存置入到数据块缓冲池中,而不是立即由系统回收,由于操作系统分配内存、释放内存的系统调用的消耗很大。通过本发明的方法可以在数据缓冲池中直接使用空闲数据单元,直到需要时才调用系统内存分配调用,这样就能够有效的避免过多调用操作系统内存分配、内存释放的系统调用,从而提高系统的效率。
附图说明
图1是本发明方法过程框图;
具体实施方式
下面结合附图和具体实施例对本发明的内容进行详细描述。在实施嵌入式系统缓冲式内存分配方法时,具体方式:
第一步:定义数据块缓冲池管理器结构,包含的内容:
1、数据单元尺寸
数据单元在内存中所占空间的字节数,每个数据单元是内存分配的最小单元;
2、数据块尺寸
数据块中单元数据的容纳量,多个数据单元组合在一起形成一个数据块,数据块的大小是一定的,所以在一个块中的数据单元个数也是一定的;
3、最多可容纳的数据块数
缓冲池中最多容纳的块数,若缓冲池中数据块超过限制,则另外开辟缓冲池;
4、已使用掉的块数
缓冲池中已被使用掉的数据块数;
5、块指针数组
缓冲池中的指向所有数据块的指针数组;
6、空闲数据链表
缓冲池中连接所有空闲数据单元的链表;
第二步:内存块缓冲池管理器功能设计:
(一)创建数据块缓冲池管理器,参数包括内存指针(null时表示自己分配)、块尺寸、单元尺寸、返回缓冲池管理器指针。现象过程如下:
1、检验参数合法性。
2、单元尺寸4字节对齐,计算每个块中的单元数。对内存指针进行4字节对齐或者分配内存指针。
3、初始化数据块缓冲池结构,包括单元尺寸和块尺寸。设置第1个内存块的指针。如果内存是外来的,设置块已用标志(已用为0),表示不能增加块;否则,已用块数设为1。
4、创建空闲链表,将块内所有单元添加到链表中,最后一个单元处于链表的最前面。
5、返回数据块缓冲池管理器指针。
(二)解构数据块缓冲池管理器,释放它所分配的所有内存,调用者负责外部内存的释放。参数为数据块缓冲池管理器。返回成功失败标志。
1、参数合法性检测。
2、删除单向链表(设链表指针为NULL)。
3、如果块是动态分配的,释放它们。
4、释放结构数据块缓冲池结构。
(三)从数据块缓冲池中分配1个单元。参数为数据块缓冲池结构,返回数据单元指针。
1、参数合法性检测。
2、判断空闲链表是否为空(是否为NULL)。如果为空,判断是否可以动态分配块,如果不能,返回失败;如果可以动态分配块,则分配1个块,执行与创建数据块缓冲池结构一样的操作。
3、从空闲链表中分配第1个单元,返回其指针。
注意这里有一个小技巧,即数据单元在空闲时其中存放空闲链表的节点信息,而分配后则存放数据内容。
(四)释放1个数据单元,返回数据块缓冲池管理器。不对1个单元释放2次。参数为数据块缓冲池结构和数据单元指针。
1、参数合法性检测。
2、地址比较,判断数据单元属于哪个块。
3、判断数据单元的内容是否为空闲链表节点信息(也就是块内某单元的地址),从而确定是否为2次释放。
4、将该数据单元插入到空闲链表的前面。
5、引用该单元的指针设为NULL。
第三步:缓冲式内存分配过程
程序需要分配内存单元时,系统首先检测缓冲池,如果缓冲池中有空闲的数据块或数据单元,则取得此数据单元的实际地址,并将该单元从空闲链表中删除。如果缓冲池中没有可用数据单元则调用系统内存分配调用为缓冲池增加分配单元,然后从缓冲池中分配。
第四步:缓冲式内存释放过程
程序释放内存时,首先检测缓冲池中是否还有空间容纳回收的内存单元,如果有,则将内存单元地址链接到内存单元空闲链表中。如果没有空间则另建立一个缓存池,然后将回收的内存单元地址链接到缓冲池的空闲链表中。
最后,还需要注意的是,以上列举的仅是本发明的具体实施例子。显然,本发明不限于以上实施例子,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
Claims (2)
1、一种嵌入式系统缓冲式内存分配方法,其特征在于,包括以下步骤:
(1)定义数据块缓冲池数据管理器的结构:
定义数据单元尺寸、数据块尺寸、最多可容纳的数据块数、已使用掉的块数、块指针数组和空闲数据链表的信息内容;
(2)设计内存块缓冲池管理器的步骤,包括:
创建数据块管理器,参数包括内存指针、块尺寸、单元尺寸和返回缓冲池管理器指针;
解构数据块管理器,释放其所分配的所有内存,调用者负责外部内存的释放,参数为数据块缓存池结构,并返回成功失败标志;
从数据块缓冲池中分配1个单元,参数为数据块缓冲池结构,返回数据单元指针;
数据单元释放,释放1个数据单元,返回数据块缓冲池结构,不对1个单元释放2次,参数为数据块结构和单元指针;
(3)缓冲式内存分配过程:
程序需要分配内存单元时,系统首先检测缓冲池,如果缓冲池中有空闲的数据块或数据单元,则取得此数据单元的实际地址,并将该单元从空闲链表中删除;如果缓冲池中没有可用数据单元则调用系统内存分配调用为缓冲池增加分配单元,然后从缓冲池中分配;
(4)缓冲式内存释放过程:
程序释放内存时,首先检测缓冲池中是否还有空间容纳回收的内存单元,如果有,则将内存单元地址链接到内存单元空闲链表中;如果没有空间则另建立一个缓存池,然后将回收的内存单元地址链接到缓冲池的空闲链表中。
2、根据权利要求1所述的嵌入式系统缓冲式内存分配方法,其特征在于,所述步骤(2)中内存指针为null时表示自己分配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2006100516260A CN1851676A (zh) | 2006-05-25 | 2006-05-25 | 一种嵌入式系统缓冲式内存分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2006100516260A CN1851676A (zh) | 2006-05-25 | 2006-05-25 | 一种嵌入式系统缓冲式内存分配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1851676A true CN1851676A (zh) | 2006-10-25 |
Family
ID=37133155
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2006100516260A Pending CN1851676A (zh) | 2006-05-25 | 2006-05-25 | 一种嵌入式系统缓冲式内存分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1851676A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101873326A (zh) * | 2010-06-24 | 2010-10-27 | 北京安天电子设备有限公司 | 一种基于有序包的迭代式病毒检测方法 |
CN101901191A (zh) * | 2010-05-31 | 2010-12-01 | 深圳市茁壮网络股份有限公司 | 嵌入式系统多类内存管理方法及装置 |
CN101976224A (zh) * | 2010-10-13 | 2011-02-16 | 清华大学 | 一种嵌入式系统的内存管理方法 |
CN102063385A (zh) * | 2010-12-23 | 2011-05-18 | 深圳市金宏威实业发展有限公司 | 一种内存管理方法和系统 |
CN102479210A (zh) * | 2010-11-30 | 2012-05-30 | 金蝶软件(中国)有限公司 | 一种在集合中添加数据的处理方法、装置、终端 |
CN102984580A (zh) * | 2012-11-12 | 2013-03-20 | 北京奇虎科技有限公司 | 内存清理方法及系统 |
CN103593485A (zh) * | 2013-12-04 | 2014-02-19 | 网易传媒科技(北京)有限公司 | 实现数据库实时操作的方法和设备 |
CN104778264A (zh) * | 2015-04-22 | 2015-07-15 | 北京科电高技术公司 | 一种键值数据库的内存分配方法 |
-
2006
- 2006-05-25 CN CNA2006100516260A patent/CN1851676A/zh active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901191A (zh) * | 2010-05-31 | 2010-12-01 | 深圳市茁壮网络股份有限公司 | 嵌入式系统多类内存管理方法及装置 |
CN101873326A (zh) * | 2010-06-24 | 2010-10-27 | 北京安天电子设备有限公司 | 一种基于有序包的迭代式病毒检测方法 |
CN101873326B (zh) * | 2010-06-24 | 2013-03-06 | 北京安天电子设备有限公司 | 一种基于有序包的迭代式病毒检测方法 |
CN101976224A (zh) * | 2010-10-13 | 2011-02-16 | 清华大学 | 一种嵌入式系统的内存管理方法 |
CN101976224B (zh) * | 2010-10-13 | 2012-05-16 | 清华大学 | 一种嵌入式系统的内存管理方法 |
CN102479210A (zh) * | 2010-11-30 | 2012-05-30 | 金蝶软件(中国)有限公司 | 一种在集合中添加数据的处理方法、装置、终端 |
CN102063385A (zh) * | 2010-12-23 | 2011-05-18 | 深圳市金宏威实业发展有限公司 | 一种内存管理方法和系统 |
CN102984580A (zh) * | 2012-11-12 | 2013-03-20 | 北京奇虎科技有限公司 | 内存清理方法及系统 |
CN102984580B (zh) * | 2012-11-12 | 2016-04-20 | 北京奇虎科技有限公司 | 内存清理方法及系统 |
CN103593485A (zh) * | 2013-12-04 | 2014-02-19 | 网易传媒科技(北京)有限公司 | 实现数据库实时操作的方法和设备 |
CN103593485B (zh) * | 2013-12-04 | 2017-06-16 | 网易传媒科技(北京)有限公司 | 实现数据库实时操作的方法和设备 |
CN104778264A (zh) * | 2015-04-22 | 2015-07-15 | 北京科电高技术公司 | 一种键值数据库的内存分配方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1851676A (zh) | 一种嵌入式系统缓冲式内存分配方法 | |
CN1276361C (zh) | 一种嵌入式系统内存管理的方法 | |
CN1271524C (zh) | 一种静态内存管理方法 | |
CN1264106C (zh) | 一种统一访问数据库系统的方法 | |
CN1317653C (zh) | 一种数据库连接的高效管理方法 | |
WO2017041570A1 (zh) | 向缓存写入数据的方法及装置 | |
CN100342353C (zh) | 嵌入式操作系统中进程映射实现方法 | |
CN1851677A (zh) | 嵌入式处理器系统及其数据操作方法 | |
CN1700196A (zh) | 通过直接存储器访问控制器传输数据的系统及方法 | |
CN1828556A (zh) | 一种数据存储的方法、系统及设备 | |
CN1851635A (zh) | 对廉价磁盘冗余阵列进行读写操作的方法和系统 | |
CN1306419C (zh) | 一种高速缓存及从高速缓存读取数据的方法 | |
WO2022151985A1 (zh) | 基于虚拟内存的数据存储方法、装置、设备及存储介质 | |
CN1896972A (zh) | 用于虚实地址变换及读写高速缓冲存储器的方法及装置 | |
CN1949214A (zh) | 一种信息归并方法及系统 | |
CN106598736A (zh) | 一种内存池的内存块调用方法和释放方法及服务器 | |
CN101034375A (zh) | 计算机存储系统 | |
CN1866218A (zh) | 软件系统的资源管理方法 | |
CN1870593A (zh) | 基于现场可编程逻辑阵列的读写缓存单元的方法及装置 | |
CN1908937A (zh) | 一种闪存中的flash文件的管理方法及系统 | |
CN1295613C (zh) | 通用Windows程序运行日志信息记录方法 | |
CN1863132A (zh) | 一种缓存管理系统与方法 | |
CN101075219A (zh) | 一种中断处理方法及系统 | |
CN1845087A (zh) | 中断处理方法及中断处理装置 | |
CN1851675A (zh) | 处理器高速数据缓存重配置方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |