一种基于动态内存分配实现数据排序与合并的系统及方法技术方案

技术编号:26797719 阅读:31 留言:0更新日期:2020-12-22 17:15
本发明专利技术公开了一种基于动态内存分配实现数据排序与合并的系统及方法,该系统中:采用地址链表方式,为每个ID的报文分配一个控制信息段;报文存储模块,解析接收到的乱序报文,获取报文携带的ID号和报文携带的长度,根据ID号和长度动态分配内存大小及指针;地址链表存储与查询模块,在输入报文时将ID号的值作为报文存储模块的地址,在输出报文时按ID号查询并读取首尾指针指示的报文;置位标志存储与查询模块,为每个ID号分配置位信息,并将置位信息按序排列;首尾标志存储与查询模块,在输入报文时获取首尾标志,输出报文时按ID号查询首尾标志,进行报文合并。本发明专利技术在存储的同时完成排序,不占用排序时间实现快速排序,并能实现快速顺序输出。

【技术实现步骤摘要】
一种基于动态内存分配实现数据排序与合并的系统及方法
本专利技术涉及数据通讯
,尤其涉及一种基于动态内存分配实现数据排序与合并的系统及方法。
技术介绍
数据排序是按一定顺序将数据排列,以便研究者通过浏览数据发现一些明显的特征或趋势,找到解决问题的线索。除此之外,排序还有助于对数据检查纠错,以及为重新归类或分组等提供方便。在计算机领域主要使用数据排序方法根据占用内存的方式不同分为2大类:内部排序方法与外部排序方法。内部排序方法:若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序、选择排序、交换排序、归并排序和基数排序。外部排序方法:外部排序基本上由两个相互独立的阶段组成。首先,按可用内存大小,将外存上含n个记录的文件分成若干长度为k的子文件或段(segment),依次读入内存并利用有效的内部排序方法对它们进行排序,并将排序后得到的有序子文件重新写入外存。通常称这些有序子文件为归并段或顺串;然后,对这些归并段进行逐趟归并,使归并段(有序子文件)逐渐由小到大,直至得到整个有序文件为止。传统的数据排序方式采用软件方式依次分块存储、并自上而下对相邻的两个序号依次比较,较大的序号下沉、较小的序号往上冒,或者采用堆排序方式等,查询时通过依次扫描方式,速度慢,浪费资源。
技术实现思路
本专利技术要解决的技术问题在于针对现有技术中的缺陷,提供一种基于动态内存分配实现数据排序与合并的系统及方法。本专利技术解决其技术问题所采用的技术方案是:本专利技术提供一种基于动态内存分配实现数据排序与合并的系统,该系统包括:报文发送模块,用于发送报文并为报文写入控制信息;采用地址链表方式,为每个ID的报文分配一个控制信息段,该控制信息段的存储地址即为报文携带的ID号,其中每个控制信息包含置位信息、地址链表、首尾标志;报文存储模块,用于存储报文内容;解析接收到乱序的报文,获取报文携带的ID号和报文携带的长度,根据ID号和长度动态分配内存大小,分配报文存储地址首指针,根据长度自动分配存储地址尾指针;地址链表存储与查询模块,用于存储和查询报文的地址链表;在输入报文时将ID号的值作为报文存储模块的地址,存储内容为各地址链表的首尾指针;在输出报文时按ID号查询并读取首尾指针指示的报文;置位标志存储与查询模块,用于排序报文;为每个ID号分配置位信息,并将置位信息按序排列,根据最小ID号对置位信息进行置位,当所有ID号对应的报文均完成置位,表示排序完成,输出排序后的报文;首尾标志存储与查询模块,用于合并报文;在输入报文时解析接收报文的特定字段,获取首尾标志,首标志即构成报文的数据块的第一帧最小单元,尾标志即构成报文的数据块的最后一帧最小单元,并存储;输出报文时按ID号查询首尾标志,进行报文合并,并输出合并后的报文数据块。进一步地,本专利技术的报文存储模块中乱序报文存储采用动态内存分配方式,根据乱序报文到达的时间顺序,划出一片连续的内存区域,按照报文到达时间进行存储,每个区域自动根据长度动态分配内存大小,实现内存动态分配。进一步地,本专利技术的报文的ID号还包括采用ID号映射值的方式。进一步地,本专利技术的置位标志存储与查询模块中置位信息的数据结构为:该数据结构以行为单位按ID号进行存储及查询,每一行包括5个字节,第1和第2个字节内存放数据存储首指针,第3和第4个字节内存放数据存储尾指针,第5个字节内存储首尾标志和置位标志。进一步地,本专利技术的首尾标志存储与查询模块中首尾标志的数据结构与置位标志的数据存储结构相同;首尾标志的作用在于:报文传输过程中受传输载体带宽限制,将报文在传输前被切割成满足传输载体带宽的报文;原长度为N字节的报文,被裁切成m个N/m字节的报文,则第1个N/m字节的报文其首标志被置位,第m个N/m字节的报文其尾标志被置位;若首尾标志均为1表示该报文未被切包,不需合并。本专利技术提供一种基于动态内存分配实现数据排序与合并的方法,包括以下步骤:步骤1:收到多个乱序的报文,根据各报文携带的长度,分配内存大小,将ID号作为写入控制信息的写地址,并依次将控制信息的写数据对应的置位信息置位,实现按序存储;步骤2:写入控制信息存储各报文首尾指针,首指针即起地址,尾指针是首指针与长度之和;存储各报文首尾标志,首标志即报文数据块的第一帧最小单元,尾标志即一个报文数据块的最后一帧最小单元;步骤3:等待最小ID号报文的置位信息被置位;步骤4:最小ID号报文置位信息被置位后,读取最小ID号控制信息的地址,根据输出获得首尾指针及首尾标志,根据首尾指针读取数据存储,输出最小ID号对应的报文数据;读取首尾指针的同时,读取首尾标志;步骤5:循环步骤3、4,查询首尾标志,满足合并条件:最小ID号报文被置位,且首标志及尾标志被置位,即可准备输出;步骤6:根据读取的报文的首尾标志,将各报文的最小帧单元合并成一个大数据块后,即完成报文数据的合并,输出合并后的报文数据块。进一步地,本专利技术的步骤1中按序存储的具体方法:(1)接收到乱序报文,获取该乱序报文的ID号及数据结构中的控制信息;(2)以乱序报文的ID号为写地址,将控制信息写入RAM中,且置位标志为1,表示该ID号报文已到位;(3)循环步骤(1)、(2),按收包顺序,存储收到的其它报文的置位及其控制信息;(4)等待最小ID号报文的置位信息被写入RAM,表示最小报文已就位,可输出最小ID号报文,即以最小ID号为RAM读地址,读出该ID号的控制信息;(5)循环步骤(4),等待次小ID号报文的置位信息被写入RAM,直到所有报文均被输出,即完成置位标志的存储与查询。进一步地,本专利技术的步骤6中通过首尾标志进行合并的具体方法:(1)按ID号为写地址存储首尾标志,等待最小ID号的置位标志被置位;(2)查询最小ID号的首尾标志,若首尾标志均被置位表示该ID号的报文无需合并,可直接输出;若仅首标志被置位,则等待次最小ID号的置位标志被置位;(3)查询次最小ID号的尾标志,若尾标志被置位则可结束一个合包过程,若尾标志未被置位,则继续等待次次最小ID号的置位信息被置位;(4)循环步骤(3)直到尾标志被置位,读出首标志、尾标志及首尾标志中间ID号的所有报文,完成报文合并。本专利技术产生的有益效果是:本专利技术的基于动态内存分配实现数据排序与合并的系统及方法,采用动态分配方式,为每个乱序报文分配合适的内存空间,节省逻辑资源;存储数据的同时存储报文首尾指针,采用置位ID号标志位的方式,等待对应标志位置位后,即可查询索引该ID号并顺序输出,存储的同时完成排序,不占用排序时间实现快速排序;充分利用FPGA并行处理的方式,极大加快数据排序速度;根据报文里的首尾标志,完成排序的同时完成数据报文合并;采用地址链表的方式,几乎不占用查询时间,实现快速顺序输出。附图说明<本文档来自技高网...

【技术保护点】
1.一种基于动态内存分配实现数据排序与合并的系统,其特征在于,该系统包括:/n报文发送模块,用于发送报文并为报文写入控制信息;采用地址链表方式,为每个ID的报文分配一个控制信息段,该控制信息段的存储地址即为报文携带的ID号,其中每个控制信息包含置位信息、地址链表、首尾标志;/n报文存储模块,用于存储报文内容;解析接收到的乱序报文,获取报文携带的ID号和报文携带的长度,根据ID号和长度动态分配内存大小,分配报文存储地址首指针,根据长度自动分配存储地址尾指针;/n地址链表存储与查询模块,用于存储和查询报文的地址链表;在输入报文时将ID号的值作为报文存储模块的地址,存储内容为各地址链表的首尾指针;在输出报文时按ID号查询并读取首尾指针指示的报文;/n置位标志存储与查询模块,用于排序报文;为每个ID号分配置位信息,并将置位信息按序排列,根据最小ID号对置位信息进行置位,当所有ID号对应的报文均完成置位,表示排序完成,输出排序后的报文;/n首尾标志存储与查询模块,用于合并报文;在输入报文时解析接收报文的特定字段,获取首尾标志,首标志即构成报文的数据块的第一帧最小单元,尾标志即构成报文的数据块的最后一帧最小单元,并存储;输出报文时按ID号查询首尾标志,进行报文合并,并输出合并后的报文数据块。/n...

【技术特征摘要】
1.一种基于动态内存分配实现数据排序与合并的系统,其特征在于,该系统包括:
报文发送模块,用于发送报文并为报文写入控制信息;采用地址链表方式,为每个ID的报文分配一个控制信息段,该控制信息段的存储地址即为报文携带的ID号,其中每个控制信息包含置位信息、地址链表、首尾标志;
报文存储模块,用于存储报文内容;解析接收到的乱序报文,获取报文携带的ID号和报文携带的长度,根据ID号和长度动态分配内存大小,分配报文存储地址首指针,根据长度自动分配存储地址尾指针;
地址链表存储与查询模块,用于存储和查询报文的地址链表;在输入报文时将ID号的值作为报文存储模块的地址,存储内容为各地址链表的首尾指针;在输出报文时按ID号查询并读取首尾指针指示的报文;
置位标志存储与查询模块,用于排序报文;为每个ID号分配置位信息,并将置位信息按序排列,根据最小ID号对置位信息进行置位,当所有ID号对应的报文均完成置位,表示排序完成,输出排序后的报文;
首尾标志存储与查询模块,用于合并报文;在输入报文时解析接收报文的特定字段,获取首尾标志,首标志即构成报文的数据块的第一帧最小单元,尾标志即构成报文的数据块的最后一帧最小单元,并存储;输出报文时按ID号查询首尾标志,进行报文合并,并输出合并后的报文数据块。


2.根据权利要求1所述的基于动态内存分配实现数据排序与合并的系统,其特征在于,报文存储模块中乱序报文存储采用动态内存分配方式,根据乱序报文到达的时间顺序,划出一片连续的内存区域,按照报文到达时间进行存储,每个区域自动根据长度动态分配内存大小,实现内存动态分配。


3.根据权利要求1所述的基于动态内存分配实现数据排序与合并的系统,其特征在于,报文的ID号还包括采用ID号映射值的方式。


4.根据权利要求1所述的基于动态内存分配实现数据排序与合并的系统,其特征在于,置位标志存储与查询模块中置位信息的数据结构为:
该数据结构以行为单位按ID号进行存储及查询,每一行包括5个字节,第1和第2个字节内存放数据存储首指针,第3和第4个字节内存放数据存储尾指针,第5个字节内存储首尾标志和置位标志。


5.根据权利要求4所述的基于动态内存分配实现数据排序与合并的系统,其特征在于,首尾标志存储与查询模块中首尾标志的数据结构与置位标志的数据存储结构相同;
首尾标志的作用在于:报文传输过程中受传输载体带宽限制,将报文在传输前被切割成满足传输载体带宽的报文;原长度为N字节的报文,被裁切成m个N/m字节的报文,则第1个N/m字节的报文其首标志被置位,第m个N/m字节的报文其尾标志被置位;...

【专利技术属性】
技术研发人员:邓政陈伯芳詹万鹏危必波郑容刘望朱瑞霖汪加宏沈永进尹健曾凡丽
申请(专利权)人:武汉中元华电科技股份有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1