System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及内存使用,具体涉及一种内存标识的使用方法和系统。
技术介绍
1、计算机软件系统在工作时会申请大量的内存,内存以碎片化的方式在内存设备中轮转,这些内存由编程人员进行控制,不停的进行申请和释放,在这些内存的申请和释放过程中,用户是看不见的,也识别不到。而随着计算机存储器的数据传输速率和程序任务的高频率调度,内存在申请和释放过程中的出错概率也大大提高。
2、现有的技术在软件使用过程中需要经过很长时间的反复检查和修改,才能解决内存使用过程中产生的错误问题,浪费了大量的人力和财力,为此,现在提出一种内存标识的使用方法和系统。
技术实现思路
1、针对上述现有技术存在的问题,本专利技术提供了一种内存标识的使用方法和系统,目的是通过在内存申请时额外申请一段标识区域用于身份验证,对内存申请、使用、释放过程进行监测,实现用户可以直观追踪软件错误、内存泄漏,以解决现有的技术在软件使用过程中无法进行快速的定位来源的问题。
2、为实现上述目的,本专利技术提供了如下技术方案:
3、第一方面,本申请提供一种内存标识的使用方法,包括如下步骤:
4、步骤一,接收程序任务发送的内存申请请求,获取所述程序任务所需要的内存并标记为待处理内存;
5、步骤二,计算实际申请内存,所述实际申请内存包括所述待处理内存和标识区域,所述标识区域长度标记为len,在所述标识区域写入标识符index1;
6、步骤三,获取所述实际申请内存对应的实际内存指针
7、步骤四,将所述用户指针发送给程序任务执行模块,基于所述用户指针判断内存申请过程是否发生错误,若是则向服务器返回失败,否则使用所述内存执行所述程序任务;
8、步骤五,内存使用完成后,接收程序任务发送的内存释放请求,判断所述需要释放的内存的标识符与所述标识符index1是否相同对所述需要释放的内存完成验证后,进行内存释放操作。
9、进一步的,所述标识区域和所述待处理内存在内存地址空间上是连续的。
10、进一步的,所述实际申请内存长度为所述程序任务所需要的内存长度和所述标识区域长度len之和,所述标识区域长度len在内存生存周期内为固定值,所述标识符的长度符合标识区域的长度。
11、进一步的,所述步骤三获取所述实际申请内存对应的实际内存指针,在所述实际内存指针的标识区域写入所述标识符index1,基于所述实际内存指针获取用户指针具体包括:
12、将所述实际申请内存发送给操作系统,操作系统根据所述实际申请内存返回实际申请内存指针;
13、获取所述实际申请内存的所述标识区域内的所述标识符,在所述实际申请内存指针的标识区域写入所述标识符index1;
14、将所述实际内存指针增加len,获得所述用户指针。
15、进一步的,所述步骤四基于所述用户指针判断内存申请过程是否发生错误具体包括:
16、将任务执行模块接收到的用户指针减去len,得到实际申请内存指针;
17、获取所述实际申请内存指针的标识符index2,比较index2与index1是否相同;
18、若不相同则确定内存申请过程发生错误,向服务器返回内存申请操作失败并记录错误日志;
19、若相同则使用所述内存执行所述程序任务。
20、进一步的,所述步骤五内存释放操作需要释放的内存包括所述程序任务使用完毕的内存和所述程序任务使用完毕的内存对应的标识区域。
21、进一步的,所述步骤五判断所述需要释放的内存的标识符与所述标识符index1是否相同对所述需要释放的内存完成验证包括:
22、基于接收的程序任务发送的内存释放请求获取待释放内存指针free;
23、将待释放内存指针free减去len,得到实际待释放内存指针并标记为tmp;
24、在所述实际待释放内存指针tmp处读取所述实际待释放内存的标识区域的标识符index3,判断index3与index1是否相同;
25、若index3与index1相同,则确定所述实际待释放内存为需要释放的目标内存,调用操作系统接口释放所述实际待释放内存;
26、若index3与index1不相同,则确定待释放内存指针有误,不进行释放,向服务器返回内存释放操作失败并记录错误日志。
27、第二方面,本申请实施例提供了一种内存标识的使用系统,包括:内存申请模块、内存处理模块、程序任务执行模块、内存释放模块和服务器;
28、所述内存申请模块用于接收程序任务发送的内存申请请求,对所述程序任务进行内存申请,并将所述程序任务申请的内存标记为待处理内存发送至内存处理模块;
29、所述内存处理模块用于对所述待处理内存增加标识区域进行处理,并得到用户指针,将所述用户指针发送给所述程序任务执行模块;所述标识区域写有标识符,所述标识符用于在内存申请、使用、释放过程中对内存身份进行验证;
30、所述程序任务执行模块用于接收所述用户指针,使用所述用户指针指向的内存执行所述程序任务;
31、所述内存释放模块用于在所述程序任务执行完毕后对所述程序任务使用过的内存进行释放,所述内存释放模块在释放内存前需要根据标识符验证待释放内存是否是所述程序任务需要释放的内存;
32、所述服务器,用于向所述程序任务返回内存操作信息,并记录和存储内存错误日志。
33、进一步的,所述内存处理模块对所述待处理内存处理以得到所述用户指针具体包括如下步骤:
34、所述内存处理模块根据所述待处理内存和标识区域计算实际申请内存,并在所述标识区域内写入标识符index1,将所述实际申请内存发送给所述内存申请模块;
35、所述内存申请模块接收到所述实际申请内存并向操作系统申请成功后,操作系统会返回所述实际申请内存指针;所述内存申请模块将所述实际申请内存指针发送给所述内存处理模块;
36、所述内存处理模块在所述实际申请内存指针的标识区域写入所述标识符index1,并将实际内存指针增加len后获得用户指针,其中len为所述标识区域长度,并将所述用户指针发送给所述程序任务执行模块。
37、进一步的,所述程序任务执行模块还包含有验证模块,所述验证模块用于在所述程序任务执行模块接收到所述用户指针后验证当前接收到的所述用户指针是否是所述程序任务需要的内存指针。
38、本专利技术的一种内存标识的使用方法和系统,具备如下有益效果:
39、本专利技术通过在程序任务需要进行内存申请时为申请内存长度增加一段的标识区域,并写入用户自定义的标识符,在内存申请完成后程序任务执行模块拿到此内存指针时根据标识符先进行身份验证,若标识符不同则向服务器返回错误信息。同时在内存释放之前对待释放内存的标识本文档来自技高网...
【技术保护点】
1.一种内存标识的使用方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的内存标识的使用方法,其特征在于,所述标识区域和所述待处理内存在内存地址空间上是连续的。
3.根据权利要求1所述的内存标识的使用方法,其特征在于,所述实际申请内存长度为所述程序任务所需要的内存长度和所述标识区域长度len之和,所述标识区域长度len在内存生存周期内为固定值,所述标识符的长度符合标识区域的长度。
4.根据权利要求1所述的内存标识的使用方法,其特征在于,所述步骤三获取所述实际申请内存对应的实际内存指针,在所述实际内存指针的标识区域写入所述标识符Index1,基于所述实际内存指针获取用户指针具体包括:
5.根据权利要求1所述的内存标识的使用方法,其特征在于,所述步骤四基于所述用户指针判断内存申请过程是否发生错误具体包括:
6.根据权利要求1所述的内存标识的使用方法,其特征在于,所述步骤五内存释放操作需要释放的内存包括所述程序任务使用完毕的内存和所述程序任务使用完毕的内存对应的标识区域。
7.根据权利要求1所述的内存标识的使
8.一种内存标识的使用系统,其特征在于,包括:内存申请模块、内存处理模块、程序任务执行模块、内存释放模块和服务器;
9.根据权利要求8所述的内存标识的使用系统,其特征在于,所述内存处理模块对所述待处理内存处理以得到所述用户指针具体包括如下步骤:
10.根据权利要求8所述的内存标识的使用系统,其特征在于,所述程序任务执行模块还包含有验证模块,所述验证模块用于在所述程序任务执行模块接收到所述用户指针后验证当前接收到的所述用户指针是否是所述程序任务需要的内存指针。
...【技术特征摘要】
1.一种内存标识的使用方法,其特征在于,包括如下步骤:
2.根据权利要求1所述的内存标识的使用方法,其特征在于,所述标识区域和所述待处理内存在内存地址空间上是连续的。
3.根据权利要求1所述的内存标识的使用方法,其特征在于,所述实际申请内存长度为所述程序任务所需要的内存长度和所述标识区域长度len之和,所述标识区域长度len在内存生存周期内为固定值,所述标识符的长度符合标识区域的长度。
4.根据权利要求1所述的内存标识的使用方法,其特征在于,所述步骤三获取所述实际申请内存对应的实际内存指针,在所述实际内存指针的标识区域写入所述标识符index1,基于所述实际内存指针获取用户指针具体包括:
5.根据权利要求1所述的内存标识的使用方法,其特征在于,所述步骤四基于所述用户指针判断内存申请过程是否发生错误具体包括:
6.根据权利要求1所述的内存标识...
【专利技术属性】
技术研发人员:方伟国,卢小银,苗小冬,雷秀军,李端发,
申请(专利权)人:合肥中科君达视界技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。