利用动态链表实现内存实时分配方法与流程

文档序号:12469953阅读:1602来源:国知局

本发明属于雷达数据处理领域,涉及一种目标点迹和航迹的处理方法。



背景技术:

运行于嵌入式实时操作系统中的某雷达数据处理软件,当处理目标数据时,需要根据收到的目标个数向系统动态申请内存以存放目标数据供后续处理;目标数据形成航迹时,还得申请内存存放航迹数据。但在实时系统中动态申请内存存在以下问题:一个是申请并成功获得内存的时间不确定,这在软件运行实时性要求高的场合无法满足要求;另一个是动态申请内存有可能失败,这给软件的后续运行带来了更大的不确定性;第三个是由于内存的频繁申请释放容易形成内存碎片,会使系统的运行速度越来越慢;第四个是频繁的对指针来回操作,很容易出现野指针,导致系统崩溃。



技术实现要素:

为了克服现有技术的不足,本发明提供一种利用动态链表实现内存实时分配方法,免去了动态内存的申请和释放,能够提高整个系统运行的灵活性、可靠性和稳定性。

本发明解决其技术问题所采用的技术方案包括以下步骤:

1)定义点迹数据结构和航迹数据结构数据类型;

2)使用静态数组方式定义若干点迹结构体对象和航迹结构体对象;

3)将步骤2)中定义点迹结构体对象和航迹结构体对象的静态数组分别链接成单向链表,得到点迹链表和航迹链表,分别记录点迹链表和航迹链表的空闲节点个数和头尾指针;

4)目标数据处理过程中,需要用到目标点迹数据结构时,从点迹链表头部取得空间,同时相应减少链表空闲节点个数;

5)目标数据处理过程中,需要用到航迹数据结构时,从航迹链表头部取得空间,同时相应减少链表空闲节点个数;

6)目标数据处理过程中,使用过的目标点迹数据结构需要释放空间时,将其加入点迹链表尾部,同时相应增加点迹链表空闲节点个数;

7)目标数据处理过程中,使用过的目标航迹数据结构需要释放空间时,将其加入航迹链表尾部,同时相应增加航迹链表空闲节点个数;

8)如果点迹链表中空闲节点的个数少于设定的最小值,或航迹链表中空闲节点的个数少于设定的最小值,在程序空闲时调用动态内存分配函数批量补充空闲节点。

所述的步骤2)中,定义点迹结构体数据对象的数量是每拍目标个数的100倍,定义航迹结构体数据对象的数量是点迹结构体数据对象数量的十分之一。

所述的步骤8)中,如果点迹链表中空闲节点的个数小于步骤3)中记录个数的十分之一,或航迹链表中空闲节点的个数小于步骤3)中记录个数的十分之一,则分别对点迹链表或航迹链表补充空闲节点数量的十分之二。

本发明的有益效果是:以静态数组申请在系统栈上的内存空间,结果确定,申请时间确定有效克服了动态申请内存在结果和时间上的不确定性,满足了实时系统的严格要求;使用过程中只是对确定指针的访问和移动,运行效率高;用另一变量记录空闲节点的个数,相当于是给空闲链表加入了双保险,大大提高整个系统运行的可靠性和稳定性。实际使用效果表明,本发明有效克服了频繁动态申请释放内存时出现的野指针而导致的系统死机问题。当空闲节点确实不够时,可调用动态内存分配补充之(这些内存是不用释放,可一直保持到系统结束)大大提高了系统的灵活性。

附图说明

图1是本发明的方法流程图。

具体实施方式

下面结合附图和实施例对本发明进一步说明,本发明包括但不仅限于下述实施例。

首先建立以目标点迹和航迹数据结构体定义的一定数量的静态数组,实现在栈上的内存分配,然后将其依次链接成单向链表,并记录头尾指针。目标数据处理和航迹处理时就从已经建立好的链表中取得空间,直接使用,从而免去了动态内存的申请和释放。从链表中取得的空间使用完毕,不再使用时,要及时归还至最初的链表中。点迹和航迹链表中的空闲节点需要保证一定的数目,当低于这个数目时,可以在程序空闲时,调用动态内存分配函数批量增加。

本发明基于静态数组,实现栈上的可靠内存分配,使用时只通过指针的访问实现了动态内存分配,避免了调用系统动态内存分配函数时的不确定性,保证了系统可靠可控运行,其流程如图1所示,包括以下步骤:

1)定义点迹数据结构和航迹数据结构数据类型。

2)使用静态数组方式,定义一定数量的点迹结构体对象和航迹结构体对象。

3)将2)中所定义静态数组依次链接成单向链表,记录空闲节点个数和链表的头尾指针。

4)目标数据处理过程中,需要用到目标点迹数据结构时,即从点迹链表头部取得空间,同时相应减少链表空闲节点个数,用掉多少个减少多少个。

5)目标数据处理过程中,需要用到航迹数据结构时,即从航迹链表头部取得空间,同时相应减少链表空闲节点个数,用掉多少个减少多少个。

6)目标数据处理过程中,使用过的目标点迹数据结构需要释放空间时,将其加入点迹链表尾部,同时相应增加点迹链表空闲节点个数,释放多少个就增加多少个。

7)目标数据处理过程中,使用过的目标航迹数据结构需要释放空间时,将其加入航迹链表尾部,同时相应增加航迹链表空闲节点个数,释放多少个就增加多少个。

8)如果目标点迹链表中空闲节点的个数少于设定的最小值,目标航迹链表中空闲节点的个数少于设定的最小值,当程序空闲时可以调用动态内存分配函数批量补充。

本发明的实施例如图1所示,首先定义符合单向链表结构的目标点迹和目标航迹数据结构体,然后以静态数组的方式在栈上获得内存空间分配,再分别编程将获得的内存空间依次链接成单向链表,记录链表头尾指针和空闲节点的个数。需要使用空间时从链表头依次获得空间使用,同时减少空闲节点的个数;当获得的空间用完需要释放时,直接依次链入链表尾部,并增加空闲节点的个数。如果空闲节点的个数少于设定的最低值,则在程序空闲时,调用动态内存分配函数补充。

本发明的实施例定义数据结构时将目标数据结构体和航迹数据结构体分别定义成适合链接成单向链表的格式,具体包括以下步骤:

1)按单向链表格式定义目标数据结构体数据类型;

2)按单向链表格式定义航迹数据结构数据类型;

3)定义结构体数据对象时,以静态数组的方式定义目标数据一定数量个,一般定义每拍目标个数的100倍,比如每拍有50个目标,可以定义5000个;

4)以静态数组的方式定义航迹数据一定数量个,一般可取目标个数的10分之一,即500个;

5)以循环的方式,将3)和4)中定义的结构体对象链接成单向链表;

6)记录目标数据空闲链表头指针;

7)记录目标数据空闲链表尾指针;

8)记录目标数据空闲链表空闲节点个数;

9)记录航迹数据空闲链表头指针;

10)记录航迹数据空闲链表尾指针;

11)记录航迹数据空闲链表空闲节点个数;

12)需要用到目标数据空间时,从目标数据空闲链表头部取用,并相应减少空闲节点的个数;同时更新目标数据空闲链表头指针;

13)需要用到航迹数据空间时,从航迹数据空闲链表头部取用,并相应减少空闲节点的个数;同时更新航迹数据空闲链表头指针;

14)空间使用结束,需要释放目标数据空间时,将其链至目标数据空间的尾部,并相应增加空闲节点的个数;同时更新目标数据空闲链表头指针;

15)空间使用结束,需要释放航迹数据空间时,将其链至航迹数据空间的尾部,并相应增加空闲节点的个数;同时更新航迹数据空闲链表头指针;

16)如果空闲节点个数小于设置个数的十分之一,则调用动态内存函数每次补充空闲节点十分之二个。目标点迹和航迹点迹分别进行。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1