一种已申请内存块的统计方法和系统的制作方法

文档序号:6632697阅读:144来源:国知局
一种已申请内存块的统计方法和系统的制作方法
【专利摘要】本发明提供一种已申请内存块的统计方法和系统,适用于VxWorks操作系统,通过链表管理模块,建立链表;通过遍历模块对操作系统内的每一个已申请内存块进行遍历,并针对每一个已申请内存块:判断链表上是否存在与已申请内存块的关键字相同的结点:如存在,更新与已申请内存块的关键字相同的结点的信息;如不存在,将已申请内存块添加为一个新结点;判断链表上是否存在有未更新信息的结点:如果有,则删除未更新的结点后通过输出模块输出链表;如果没有,则直接输出链表。并且,链表管理模块、遍历模块和输出模块都是由控制模块来控制管理的。本发明通过察看内存使用和变化情况,有效、快捷地缩小内存泄漏的定位,提供内存实时使用情况。
【专利说明】一种已申请内存块的统计方法和系统

【技术领域】
[0001] 本发明涉及一种内存块的统计方法,特别是涉及一种基于VxWorks操作系统的已 申请内存块的统计方法和系统。

【背景技术】
[0002] 内存管理是计算机科学中的一个重要研究领域,而内存管理中的一个重要研究课 题是解决或处理内存泄漏问题。所谓的内存泄漏,是指程序在申请获得动态内存并使用完 毕后,不释放动态内存就将保存动态内存地址的变量用于其它用途,是的这些动态内存不 可能再被程序使用,也无法被操作系统回收。
[0003] 内存泄露是软件开发中最常见也最棘手的程序错误种类之一。对于规模较大的程 序,内存泄露将导致程序最终因耗尽系统所有的内存,无法再进行内存分配而崩溃。并且, 内存泄露非常不容易查找和定位,使用常规的方法很难快速定位内存泄露出现的具体位 置,特别是VxWorks操作系统。
[0004] VxWorks是美国Wind River公司设计开发的一种嵌入式实时操作系统,是嵌入式 开发环境的关键组成部分。其以良好的可靠性和卓越的实时性被广泛应用于很多实时性 要求极高的领域。VxWorks采用用户程序、内核处于同一个内存空间的共享内存管理策略, 而且,操作系统对内存空间没有保护,各个进程或任务实际上共享一个内存空间。一个任 务在执行前,系统必须为它分配足够的连续内存空间,然后全部载入主存储器的连续空间。 VxWorks操作系统一般运行在嵌入式装置里面,往往很难或不能重新启动系统,因此若发生 了内存泄露,常常无法通过静态插装等方式查找内存泄露,而需要实时检测内存泄露,并定 位故障。因此,软件开发人员在开发程序时,必须保证不侵犯其他程序和内核的内存空间, 以免破坏系统的正常工作或导致其他程序异常运行。
[0005] 目前,针对VxWorks操作系统的内存管理主要是对内存分区、内存动态申请和释 放,以及空闲内存块进行管理,但是,对已经申请的内存块(正在被使用的内存块)不做任 何管理和"干涉",因此无法使用内存管理机制对已申请内存块进行分类统计,软件开发和 维护人员也就更加难以寻找发生内存泄露的任务。


【发明内容】

[0006] 鉴于以上所述现有技术的缺点,本发明的目的在于提供一种已申请内存块的统计 方法和系统,用于解决现有技术中VxWorks操作系统中,无法对已申请内存块进行统计管 理的问题。
[0007] 为实现上述目的及其他相关目的,本发明提供一种已申请内存块的统计方法,适 用于VxWorks操作系统,包括:步骤一,建立链表;步骤二,遍历所述VxWorks操作系统内的 每一个已申请内存块,并针对每一个已申请内存块,判断所述链表上是否存在与已申请内 存块的关键字相同的结点:如果存在,则更新与已申请内存块的所述关键字相同的结点的 信息;如果不存在,则将已申请内存块添加为一个新结点;步骤三,判断所述链表上是否存 在有未更新信息的结点:如果有,则删除所述未更新信息的结点,并跳转至步骤四;如果没 有,则直接跳转至步骤四;步骤四,输出所述链表。
[0008] 可选地,对所述VxWorks操作系统内的已申请内存块的遍历顺序是由所述 VxWorks操作系统的已申请内存块的地址决定的。
[0009] 可选地,所述链表包括多个所述结点,每一个所述结点包括一个或多个已申请内 存块。
[0010] 可选地,创建所述链表使用的内存是从一个结构体数组中申请的。
[0011] 可选地,所述关键字是已申请内存块的大小。
[0012] 可选地,所述关键字是使用已申请内存块的任务。
[0013] 可选地,已申请内存块的后4个字节用于描述所述任务的任务ID;在所述链表中, 任务ID、结点和已申请的内存块之间存在映射关系。
[0014] 一种已申请内存块的统计系统,适用于VxWorks操作系统,包括:链表管理模块、 遍历模块、控制模块和输出模块;所述链表管理模块用于创建链表,生成、更新和删除所述 链表中的结点;所述遍历模块用于遍历所述VxWorks操作系统内的已申请内存块;所述控 制模块用于根据已申请内存块的关键字控制管理所述链表管理模块、所述遍历模块和所述 输出模块;其中,所述已申请内存块的关键字为已申请内存块的大小或使用已申请内存块 的任务;所述输出模块用于输出所述统计系统的统计结果。
[0015] 可选地,所述链表管理模块所使用的内存是从一个结构体数组中申请的。
[0016] 可选地,所述链表包括多个所述结点,所述结点包括一个或多个已申请内存块。
[0017] 如上所述,本发明的一种已申请内存块的统计方法和系统,适用于VxWorks操作 系统,其可以通过察看内存使用和变化情况的手段,有效帮助软件开发人员缩小内存泄漏 问题定位的范围,也可以为软件开发人员提供内存使用情况的实时信息。当系统发生内存 泄漏,但开发或维护人员不确定是由哪个任务哪个内存块泄漏引起时,使用本发明就可以 简单直观地获取到相应的信息。

【专利附图】

【附图说明】
[0018] 图1显示为本发明实施例公开的一种已申请内存块的统计方法的流程示意图。
[0019] 图2显示为依据使用已申请内存块的任务使用本发明实施例公开的一种已申请 内存块的统计方法进行统计的统计结果。
[0020] 图3显示为依据已申请内存块的大小使用本发明实施例公开的一种已申请内存 块的统计方法进行统计的统计结果。
[0021] 图4显示为本发明实施例公开的一种已申请内存块的统计系统的结构示意图。
[0022] 元件标号说明
[0023] Sll ?S14 步骤
[0024] 200 已申请内存块的统计系统
[0025] 210 链表管理模块
[0026] 220 遍历模块
[0027] 230 控制模块
[0028] 240 输出模块

【具体实施方式】
[0029] 以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书 所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实 施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离 本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施 例中的特征可以相互组合。
[0030] 请参阅图1至图4需要说明的是,以下实施例中所提供的图示仅以示意方式说明 本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数 目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其 组件布局型态也可能更为复杂。
[0031] 实施例1
[0032] 本实施例公开了一种的已申请内存块的统计方法,适用于VxWorks操作系统。本 实施例是基于VxW 〇rks6. 8操作系统。VxWorks操作系统的内存管理主要是对内存分区、内 存动态申请和释放,以及空闲内存块进行的管理。但是VxWorks操作系统的内存管理机制 对已申请内存块则不做任何的管理。
[0033] 在VxWorks操作系统中,内存块的头部都会保存有当前内存块的大小,所以对内 存块大小进行统计可以在VxWorks操作系统的原有内存管理机制上加以改进来实现;但是 如果对任务类型进行统计就需要对内存块的头部加以修改:VxWorks操作系统的内存块的 头部一共有16个字节,已申请内存块的头部的后4个字节是预留的,因此,本实施例就使用 这最后4个字节来保存任务ID (Identification,标识),这样就可根据任务ID对各个任务 进行内存块的统计。
[0034] 本实施例的已申请的内存块的统计方法是使用单向链表对已申请内存块信息进 行分类统计,如图1所示,包括:
[0035] 步骤一 S11,建立链表;其中,链表是一个单向链表。
[0036] 单向链表创建时使用的内存不是从堆内存中动态申请的,而是从一个全局的结构 体数组中申请的。这样既可以避免在统计过程中由于动态申请和释放内存引起的部分统计 结果的偏差,也可以避免堆内存即将耗尽时无法进行统计或统计过程发生错误。
[0037] 并且,如果对已申请内存块的统计是针对已申请内存块的大小而进行的话,那么 链表仅包括多个结点,且每一个结点包括一个或多个已申请的内存块。如果统计是针对使 用已申请内存块的任务,那么,要将已申请内存块的头部的后4个字节用来描述使用该已 申请内存块的任务的任务ID ;并且,链表在建立过程时,结点和任务的任务ID之间是存在 映射关系的。其是通过回调函数在系统创建任务时,将建立好映射的结点添加到链表中。这 样可以统计一些已经不存在,但仍然暂用一些堆内存的任务,也可以准确地统计出任务名 为NULL的任务。
[0038] 本实施例的已申请内存块的数据结构定义如下:
[0039]

【权利要求】
1. 一种已申请内存块的统计方法,适用于VxWorks操作系统,其特征在于,所述已申请 内存块的统计方法包括: 步骤一,建立链表; 步骤二,遍历所述VxWorks操作系统内的每一个已申请内存块,并针对每一个已申请 内存块,判断所述链表上是否存在与已申请内存块的关键字相同的结点:如果存在,则更新 与已申请内存块的所述关键字相同的结点的信息;如果不存在,则将已申请内存块添加为 一个新结点; 步骤三,判断所述链表上是否存在有未更新信息的结点:如果有,则删除所述未更新信 息的结点,并跳转至步骤四;如果没有,则直接跳转至步骤四; 步骤四,输出所述链表。
2. 根据权利要求1所述的已申请内存块的统计方法,其特征在于,对所述VxWorks操作 系统内的已申请内存块的遍历顺序是由所述VxWorks操作系统的已申请内存块的地址决 定的。
3. 根据权利要求1所述的已申请内存块的统计方法,其特征在于,所述链表包括多个 所述结点,每一个所述结点包括一个或多个已申请内存块。
4. 根据权利要求1所述的已申请内存块的统计方法,其特征在于,创建所述链表使用 的内存是从一个结构体数组中申请的。
5. 根据权利要求1所述的已申请内存块的统计方法,其特征在于,所述关键字是已申 请内存块的大小。
6. 根据权利要求1所述的已申请内存块的统计方法,其特征在于,所述关键字是使用 已申请内存块的任务。
7. 根据权利要求6所述的已申请内存块的统计方法,其特征在于,已申请内存块的后 4个字节用于描述所述任务的任务ID ;在所述链表中,任务ID、结点和已申请的内存块之间 存在映射关系。
8. -种已申请内存块的统计系统,适用于VxWorks操作系统,其特征在于,所述已申请 内存块的统计系统包括:链表管理模块、遍历模块、控制模块和输出模块; 所述链表管理模块用于创建链表,生成、更新和删除所述链表中的结点; 所述遍历模块用于遍历所述VxWorks操作系统内的已申请内存块; 所述控制模块用于根据已申请内存块的关键字控制管理所述链表管理模块、所述遍历 模块和所述输出模块;其中,所述已申请内存块的关键字为已申请内存块的大小或使用已 申请内存块的任务; 所述输出模块用于输出所述统计系统的统计结果。
9. 根据权利要求8所述的已申请内存块的统计系统,其特征在于,所述链表管理模块 所使用的内存是从一个结构体数组中申请的。
10. 根据权利要求8所述的已申请内存块的统计系统,其特征在于,所述链表包括多个 所述结点,所述结点包括一个或多个已申请内存块。
【文档编号】G06F12/02GK104360954SQ201410604528
【公开日】2015年2月18日 申请日期:2014年10月30日 优先权日:2014年10月30日
【发明者】陆丹宏, 周琳, 刘驰 申请人:上海斐讯数据通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1