System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种用于数据传递的内存共享方法及系统技术方案_技高网

一种用于数据传递的内存共享方法及系统技术方案

技术编号:40874777 阅读:2 留言:0更新日期:2024-04-08 16:43
本发明专利技术公开了一种用于数据传递的内存共享方法及系统,由内存管理初始化函数从系统中申请一块连续的内存,作为数据传输用的共享内存池,并对共享内存池设置临界保护;在共享内存池中申请一块内存用作数据传递,并由内存管理分配函数对需要传输的数据进行循环分配,并解除临界保护后发送至用户接收端函数;由用户接收端函数检测内存块中的信息可靠性后发送至内存管理检测函数。本发明专利技术采用只分配不回收的方式循环复用同一段内存空间实现在程序的不同模块之间传递数据,这样的方法执行效率高于调用系统内存管理接口来分配与释放内存的方法,因为始终只使用同一块内存,在避免内存的碎片化的同时也提高了内存空间的使用效率。

【技术实现步骤摘要】

本专利技术属于数据传递,具体涉及一种用于数据传递的内存共享方法及系统


技术介绍

1、在c语言环境的程序编写中,系统经常需要在各个模块之间传递一些关键的数据变量,这些数据的大小和使用时机通常具有很大的随机性,同时这种应用通常具有数据量小、使用频次高、作用时间短的特点,如何高效且安全地完成数据的传递是一个很关键的问题,这决定了程序的性能及可靠性。

2、为了在各个不同程序模块之间传递数据,通常的做法是把数据所在的内存地址告诉需求端,然后由需求端来读取指定内存里的数据从而完成一次数据传递。为了实现地址传递,通常采用系统自带的内存管理接口来分配一块空间,使用端在处理完该数据后再调用系统自带的内存管理接口函数来释放内存空间,或者不释放该内存空间,把该内存空间作为专有的变量传输的存储空间。

3、使用系统内存管理接口的方法来传递数据涉及到内存的分配和释放,这会增大系统的开销,同时频繁调度内存分配会让完整的内存池碎片化,降低系统的运行效率。同时该方法传递参数需要配对进行,数据源端分配内存后要在使用的目标端释放该内存,但是程序在开发阶段通常存在着频繁的变更,由于程序的调整,数据的使用和释放没有做到严格的一一对应,少量的未释放内存造成的内存泄露,累积到一定程度会造成数据传输的错误和程序的崩溃,这种问题还不容易排查。而采用不释放内存,把分配的内存空间作为专用的变量传输存储空间的方法则会造成内存空间的浪费。


技术实现思路

1、本专利技术的目的在于提供一种用于数据传递的内存共享方法,采用只分配不回收的方法循环复用共享同一段内存来进行程序模块之间的数据传递,以解决上述
技术介绍
中提出现有技术中的问题。

2、为实现上述目的,本专利技术采用了如下技术方案:一种用于数据传递的内存共享方法,包括:由内存管理初始化函数从系统中申请一块连续的内存,作为数据传输用的共享内存池,并对所述共享内存池设置临界保护;在所述共享内存池中申请一块内存用作数据传递,并由内存管理分配函数对需要传输的数据进行循环分配,并解除临界保护后发送至用户接收端函数;由用户接收端函数检测内存块中的信息可靠性后发送至内存管理检测函数,内存管理检测函数读出该内存信息进行检测其是否被覆盖过。

3、优选地,所述对所述共享内存池设置临界保护,包括:通过内存管理初始化函数调用系统的内存管理接口,从系统的内存堆中申请分配一块连续的内存,作为数据传输用的共享内存池;内存管初始化函数初始化内存管理用的偏移指针并对一个互斥变量进行初始化,用作内存分配时的临界保护。

4、优选地,所述由内存管理分配函数对需要传输的数据进行循环分配,包括:把内存空间的数量及地址作为变量传入内存管理分配函数,并对数量的值做块对齐;内存管理分配函数进入临界代码保护段,对内存池剩余的内存空间进行检测,判断其是否能满足本次的分配需求。

5、优选地,所述由内存管理分配函数对需要传输的数据进行循环分配,还包括:若剩余的内存空间不能满足分配需求,通过内存管理分配函数把内存池的偏移指针指向内存池开始的位置重新开始新一次循环。

6、优选地,所述对数量的值做块对齐,包括:内存管理分配函数对这个数量的值做以32字节为单位的块对齐,不满32字节的部分强制分配为32字节。

7、优选地,所述解除临界保护后发送至用户接收端函数,包括:通过内存管理分配函数把本次分配内存地址开始的连续32个字节作为内存管理信息表;由内存管理信息表把用户调用函数的地址作为信息记录在内,以供内存管理检测函数对该块内存的正确性进行监控;通过内存管理分配函数把分配到的内存地址增加32byte以屏蔽内存管理信息,使得用户接收端函数能直接使用申请到的内存空间。

8、优选地,所述内存管理信息表中设有内存块使用标志。

9、优选地,所述由用户接收端函数检测内存块中的信息可靠性后发送至内存管理检测函数,包括:用户接收端函数在获得共享的内存指针后需要检测该内存块信息的可靠性,用户把接收到的指针以及事先约定好的发送端函数的地址作为参数传入内存管理检测函数;内存管理检测函数把该地址往前偏移32个字节来获得其内存管理信息表所对应的地址;内存管理检测函数读出该内存管理信息表后对其存储的信息进行判断,检测其是否有被其他程序的调用给覆盖过。

10、优选地,所述内存管理检测函数读出该内存信息进行检测其是否被覆盖过,包括:由内存管理检测函数检查内存管理信息表内的使用标志是否跟约定的数值一致;判断其存储的发送端函数的地址是否符合约定值;如果其中一个值不正常则说明该块内存经历过重复分配。

11、另一方面,本专利技术提出一种用于数据传递的内存共享系统,包括:

12、内存管理初始化模块,用于发起内存管理初始化函数从系统中申请一块连续的内存,作为数据传输用的共享内存池,并对所述共享内存池设置临界保护;

13、内存管理分配模块,用于发起在所述共享内存池中申请一块内存用作数据传递,并由内存管理分配函数对需要传输的数据进行循环分配,并解除临界保护后发送至用户接收端函数;

14、内存管理检测模块,用于发起由用户接收端函数检测内存块中的信息可靠性后发送至内存管理检测函数,内存管理检测函数读出该内存信息进行检测其是否被覆盖过。

15、本专利技术的技术效果和优点:本专利技术提出的一种用于数据传递的内存共享方法,与现有技术相比,具有以下优点:

16、本专利技术采用只分配不回收的方式循环复用同一段内存空间实现在程序的不同模块之间传递数据,这样的方法执行效率高于调用系统内存管理接口来分配与释放内存的方法,因为始终只使用同一块内存,在避免内存的碎片化的同时也提高了内存空间的使用效率,本专利技术在申请内存的时候只需要申请需要的内存空间而不需要进行释放操作,所以避免了内存泄露,提高了系统的鲁棒性。

本文档来自技高网...

【技术保护点】

1.一种用于数据传递的内存共享方法,其特征在于,包括:

2.根据权利要求1所述的一种用于数据传递的内存共享方法,其特征在于,所述对所述共享内存池设置临界保护,包括:

3.根据权利要求1所述的一种用于数据传递的内存共享方法,其特征在于,所述由内存管理分配函数对需要传输的数据进行循环分配,包括:

4.根据权利要求3所述的一种用于数据传递的内存共享方法,其特征在于,所述由内存管理分配函数对需要传输的数据进行循环分配,还包括:

5.根据权利要求3所述的一种用于数据传递的内存共享方法,其特征在于,所述对数量的值做块对齐,包括:内存管理分配函数对这个数量的值做以32字节为单位的块对齐,不满32字节的部分强制分配为32字节。

6.根据权利要求5所述的一种用于数据传递的内存共享方法,其特征在于,所述解除临界保护后发送至用户接收端函数,包括:

7.根据权利要求6所述的一种用于数据传递的内存共享方法,其特征在于:所述内存管理信息表中设有内存块使用标志。

8.根据权利要求5所述的一种用于数据传递的内存共享方法,其特征在于,所述由用户接收端函数检测内存块中的信息可靠性后发送至内存管理检测函数,包括:

9.根据权利要求8所述的一种用于数据传递的内存共享方法,其特征在于,所述内存管理检测函数读出该内存信息进行检测其是否被覆盖过,包括:

10.一种用于数据传递的内存共享系统,其特征在于,包括:

...

【技术特征摘要】

1.一种用于数据传递的内存共享方法,其特征在于,包括:

2.根据权利要求1所述的一种用于数据传递的内存共享方法,其特征在于,所述对所述共享内存池设置临界保护,包括:

3.根据权利要求1所述的一种用于数据传递的内存共享方法,其特征在于,所述由内存管理分配函数对需要传输的数据进行循环分配,包括:

4.根据权利要求3所述的一种用于数据传递的内存共享方法,其特征在于,所述由内存管理分配函数对需要传输的数据进行循环分配,还包括:

5.根据权利要求3所述的一种用于数据传递的内存共享方法,其特征在于,所述对数量的值做块对齐,包括:内存管理分配函数对这个数量的值做以32字节为单位的块对齐,不满32字节的部分...

【专利技术属性】
技术研发人员:吴建和
申请(专利权)人:深圳市路畅科技股份有限公司
类型:发明
国别省市:

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

1