一种获取内存占用量的方法、装置、计算机设备及介质制造方法及图纸

技术编号:22329805 阅读:31 留言:0更新日期:2019-10-19 12:13
本发明专利技术实施例提供一种获取内存占用量的方法,包括:获取程序模块中所有的函数信息;利用第一钩子函数对各函数的起始点进行hook,将第一监控函数注入至每个函数的起始点;利用第二钩子函数对各函数的结束点进行hook,将第二监控函数注入至每个函数的结束点;当利用第一监控函数监控到每个函数执行的开始时刻时,获取每个函数对应的第一内存占用量;当利用第二监控函数监控到每个函数执行的结束时刻时,获取每个函数对应的第二内存占用量;根据对应的第一内存占用量及对应的第二内存占用量确定每个函数在执行过程中所使用的内存占用量;如此,可以得知哪个函数使用的内存占用量比较大,进而针对性地对该函数进行优化,确保程序的运行效率。

【技术实现步骤摘要】
一种获取内存占用量的方法、装置、计算机设备及介质
本专利技术属于软件开发
,尤其涉及一种获取内存占用量的方法、装置、计算机设备及介质。
技术介绍
在程序开发中,内存的使用对于程序运行来说是非常关键的指标,在程序运行中,若内存占用量太大的话,会影响整个程序的运行效率。现有技术中是通过设置一个定时器不断的去获取当前内存的使用情况,从而监控内存的使用量,然而此种方法只能监控内存使用量,无法为开发人员提供优化方向,导致开发人员不能针对性地对内存占用进行优化,进而也无法提高程序运行效率。
技术实现思路
针对现有技术存在的问题,本专利技术实施例提供了一种获取内存占用量的方法、装置、计算机设备及介质,用于解决在程序开发中,当内存占用量比较大时,现有技术中无法为开发人员提供优化方向,导致开发人员不能针对性地对内存占用进行优化,进而导致程序的运行效率不能得到保证的技术问题。本专利技术实施例提供一种获取内存占用量的方法,所述方法包括:获取程序模块中所有的函数信息;利用预设的第一钩子函数对各函数的起始点进行hook,将预设的第一监控函数注入至每个函数的起始点;利用预设的第二钩子函数对所述各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点;当利用所述第一监控函数监控到每个函数执行的开始时刻时,获取所述每个函数对应的第一内存占用量;当利用所述第二监控函数监控到所述每个函数执行的结束时刻时,获取所述每个函数对应的第二内存占用量;根据对应的所述第一内存占用量及对应的所述第二内存占用量确定所述每个函数在执行过程中所使用的内存占用量,所述内存占用量为所述第二内存占用量与所述第一内存占用量的差值。上述方案中,所述获取程序模块中所有的函数信息后,包括:将所述各函数信息按照预先设置的函数结构存储在预先建立的函数链表中;其中,每个函数对应一个函数结构,所述函数结构包括:用于记录函数名称的Stringname,用于记录程序模块名称的第一参数stringmodule,用于记录所述程序模块的起始地址的第二参数DWORDdwbase,用于记录所述函数相对于所述程序模块的起始偏移量的第三参数DWORDdwstart,用于记录所述函数本身内存的第四参数DWORDdwsize,用于记录所述函数在执行开始时刻对应的第一内存占用量的第五参数Longdwmemory。上述方案中,所述利用预设的第一钩子函数对各函数的起始点进行hook,将预设的第一监控函数注入至每个函数的起始点包括:逐一获取每个函数对应的程序模块的起始地址及所述每个函数相对于对应的程序模块的起始偏移量;根据对应的程序模块的起始地址及所述每个函数相对于所述对应的程序模块的起始偏移量确定所述每个函数的起始内存地址;利用所述第一钩子函数将预先建立的第一监控函数注入至所述每个函数的起始内存地址处,更新所述每个函数所在的当前线程,完成对各函数起始点的hook。上述方案中,所述利用预设的第二钩子函数对各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点包括:逐一获取每个函数对应的程序模块的起始地址、所述每个函数本身的内存及所述每个函数相对于对应的程序模块的起始偏移量;根据所述每个函数本身的内存及所述每个函数相对于对应的程序模块的起始偏移量确定所述每个函数的结束内存地址;利用所述第二钩子函数将预先建立的第二监控函数注入至所述每个函数的结束内存地址处,更新所述每个函数所在的当前线程,完成对各函数结束点的hook。上述方案中,所述利用预设的第二钩子函数对所述各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点后,包括:获取各函数所在的当前进程的句柄;当每个函数开始执行时,基于所述当前进程的句柄,利用内存使用量获取函数获取所述每个函数在执行的开始时刻对应的所述第一内存占用量;将各所述第一内存占用量分别赋值给对应函数结构的第五参数。上述方案中,所述当利用所述第一监控函数监控到每个函数执行的开始时刻时,获取所述每个函数对应的第一内存占用量,包括:当利用所述第一监控函数监控到每个函数执行的开始时刻时,将所述每个函数的当前起始内存地址与所述函数链表中所有函数的起始内存地址进行一一匹配;若匹配成功时,从匹配成功的函数结构中获取所述每个函数对应的所述第一内存占用量。上述方案中,所述当利用所述第二监控函数监控到所述每个函数执行的结束时刻时,获取所述每个函数对应的第二内存占用量,包括:获取各函数所在的当前进程的句柄;当利用所述第二监控函数监控到目标函数执行的结束时刻时,基于所述当前进程的句柄,利用内存使用量获取函数获取所述每个函数在执行的结束时刻对应的所述第二内存占用量。本专利技术实施例还提供一种获取内存占用量的装置,所述装置包括:第一获取单元,用于获取程序模块中所有的函数信息;注入单元,用于利用预设的第一钩子函数对各函数的起始点进行hook,将预设的第一监控函数注入至每个函数的起始点;利用预设的第二钩子函数对所述各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点;第二获取单元,用于当利用所述第一监控函数监控到每个函数执行的开始时刻时,获取所述每个函数对应的第一内存占用量;第三获取单元,用于当利用所述第二监控函数监控到所述每个函数执行的结束时刻时,获取所述每个函数对应的第二内存占用量;确定单元,用于根据对应的所述第一内存占用量及对应的所述第二内存占用量确定所述每个函数在执行过程中所使用的内存占用量,所述内存占用量为所述第二内存占用量与所述第一内存占用量的差值。本专利技术实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述任一项所述的方法。本专利技术实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述任一项所述的方法。本专利技术实施例提供了一种获取内存占用量的方法、装置、计算机设备及服务器,所述方法包括:获取程序模块中所有的函数信息;利用预设的第一钩子函数对各函数的起始点进行hook,将预设的第一监控函数注入至每个函数的起始点;利用预设的第二钩子函数对所述各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点;当利用所述第一监控函数监控到每个函数执行的开始时刻时,获取所述每个函数对应的第一内存占用量;当利用所述第二监控函数监控到所述每个函数执行的结束时刻时,获取所述每个函数对应的第二内存占用量;根据对应的所述第一内存占用量及对应的所述第二内存占用量确定所述每个函数在执行过程中所使用的内存占用量,所述内存占用量为所述第二内存占用量与所述第一内存占用量的差值;如此,对于每个函数来说,在每个函数执行的开始时刻,利用第一钩子函数获取到执行开始时刻时函数的第一内存占用量;在执行的结束时刻,利用第一钩子函数获取到执行结束时刻时函数的第二内存占用量,第二内存占用量及第一内存占用量的差值即为该函数在执行过程中使用的内存占用量;这样可以清楚地得出每个函数在执行过程所需要的内存占用量,那么开发人员就可以轻易得知哪个函数使用的内存占用量比较大,进而可以针对性地对该函数进行优化,确保程序的运行效率。附图说明图1为本专利技术实施例一提供本文档来自技高网...

【技术保护点】
1.一种获取内存占用量的方法,其特征在于,所述方法包括:获取程序模块中所有的函数信息;利用预设的第一钩子函数对各函数的起始点进行hook,将预设的第一监控函数注入至每个函数的起始点;利用预设的第二钩子函数对所述各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点;当利用所述第一监控函数监控到每个函数执行的开始时刻时,获取所述每个函数对应的第一内存占用量;当利用所述第二监控函数监控到所述每个函数执行的结束时刻时,获取所述每个函数对应的第二内存占用量;根据对应的所述第一内存占用量及对应的所述第二内存占用量确定所述每个函数在执行过程中所使用的内存占用量,所述内存占用量为所述第二内存占用量与所述第一内存占用量的差值。

【技术特征摘要】
1.一种获取内存占用量的方法,其特征在于,所述方法包括:获取程序模块中所有的函数信息;利用预设的第一钩子函数对各函数的起始点进行hook,将预设的第一监控函数注入至每个函数的起始点;利用预设的第二钩子函数对所述各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点;当利用所述第一监控函数监控到每个函数执行的开始时刻时,获取所述每个函数对应的第一内存占用量;当利用所述第二监控函数监控到所述每个函数执行的结束时刻时,获取所述每个函数对应的第二内存占用量;根据对应的所述第一内存占用量及对应的所述第二内存占用量确定所述每个函数在执行过程中所使用的内存占用量,所述内存占用量为所述第二内存占用量与所述第一内存占用量的差值。2.如权利要求1所述的方法,其特征在于,所述获取程序模块中所有的函数信息后,包括:将所述各函数信息按照预先设置的函数结构存储在预先建立的函数链表中;其中,每个函数对应一个函数结构,所述函数结构包括:用于记录函数名称的Stringname,用于记录程序模块名称的第一参数stringmodule,用于记录所述程序模块的起始地址的第二参数DWORDdwbase,用于记录所述函数相对于所述程序模块的起始偏移量的第三参数DWORDdwstart,用于记录所述函数本身内存的第四参数DWORDdwsize,用于记录所述函数在执行开始时刻对应的第一内存占用量的第五参数Longdwmemory。3.如权利要求1所述的方法,其特征在于,所述利用预设的第一钩子函数对各函数的起始点进行hook,将预设的第一监控函数注入至每个函数的起始点包括:逐一获取每个函数对应的程序模块的起始地址及所述每个函数相对于对应的程序模块的起始偏移量;根据对应的程序模块的起始地址及所述每个函数相对于所述对应的程序模块的起始偏移量确定所述每个函数的起始内存地址;利用所述第一钩子函数将预先建立的第一监控函数注入至所述每个函数的起始内存地址处,更新所述每个函数所在的当前线程,完成对各函数起始点的hook。4.如权利要求1所述的方法,其特征在于,所述利用预设的第二钩子函数对各函数的结束点进行hook,将预设的第二监控函数注入至所述每个函数的结束点包括:逐一获取每个函数对应的程序模块的起始地址、所述每个函数本身的内存及所述每个函数相对于对应的程序模块的起始偏移量;根据所述每个函数本身的内存及所述每个函数相对于对应的程序模块的起始偏移量确定所述每个函数的结束内存地址;利用所述第二钩子函数将预先建立的第二监控函数注入至所述每个函数的结...

【专利技术属性】
技术研发人员:周志刚
申请(专利权)人:武汉斗鱼鱼乐网络科技有限公司
类型:发明
国别省市:湖北,42

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

1