监测堆栈使用量以优化程序制造技术

技术编号:36653112 阅读:22 留言:0更新日期:2023-02-18 13:16
本发明专利技术涉及监测堆栈使用量以优化程序。本发明专利技术实施例提供一种确定堆栈使用量的方法、系统和计算机程序产品。该方法包括:执行截获函数以在堆栈中存储堆栈标记,其中,当程序进入或退出程序的多个函数的每个函数时调用截获函数;在程序执行期间识别堆栈中的多个堆栈标记并确定每个堆栈标记的内存地址,以获取多个内存地址;分析所述多个内存地址以识别与最大堆栈深度相关联的特定内存地址;基于最大堆栈深度确定程序的堆栈使用量。深度确定程序的堆栈使用量。深度确定程序的堆栈使用量。

【技术实现步骤摘要】
监测堆栈使用量以优化程序


[0001]本专利技术实施例涉及基于堆栈的内存分配,更具体地说,涉及监测由程序使用的堆栈内存量并相应地优化程序。

技术介绍

[0002]堆栈是程序的特定内存区域,其中的数据是以先进后出方式管理的,当程序进入函数时,向堆栈添加数据;当程序退出函数时,删除该数据。通常用堆栈来存储当前活动的函数的局部定长变量。也可将堆栈也用于调用方自变量(caller arguments)、局部变量、寄存器保存区域、返回地址、保存的堆栈指针、对齐填充(alignment padding)和/或其他数据,具体取决于使用的编译器和调用协议。
[0003]程序需要的堆栈量可能是事先未知的,但可以使用各种技术根据经验确定。一般来说,程序员寻求在不分配过多堆栈的情况下分配足以满足程序需求的堆栈量,从而确保程序可以正确执行,同时避免不必要的计算资源消耗。

技术实现思路

[0004]根据本专利技术的一个实施例,计算机系统确定堆栈使用量。执行截获函数(intercept function),以在堆栈中存储堆栈标记,其中,当程序进入或退出程序的多个函数的每个函数时调用截获函数。在程序执行期间识别堆栈中的多个堆栈标记并确定每个堆栈标记的内存地址,以获取多个内存地址。分析所述多个内存地址以识别与最大堆栈深度相关联的特定内存地址。基于最大堆栈深度确定程序的堆栈使用量。本专利技术的实施例还包括用于以与上述基本相同的方式确定堆栈使用量的方法和程序产品。
附图说明
[0005]一般来说,不同附图中的相似标号用来表示相似的部件。
[0006]图1是描述根据本专利技术实施例的用于确定堆栈使用量的计算环境的框图;
[0007]图2是描述根据本专利技术实施例的运行时程序的框图;
[0008]图3是描述根据本专利技术实施例的堆栈的框图;
[0009]图4是描述根据本专利技术实施例的堆栈使用量数据的收集的框图;
[0010]图5是描述根据本专利技术实施例的确定堆栈使用量的方法的流程图;
[0011]图6是描述根据本专利技术实施例的收集堆栈跟踪的方法的流程图;
[0012]图7是描述根据本专利技术实施例对堆栈跟踪树的框图;
[0013]图8是描述根据本专利技术实施例的计算设备的框图。
具体实施方式
[0014]本专利技术实施例涉及基于堆栈的内存分配,更具体地说,涉及监测由程序使用的堆栈内存量并相应地优化程序。堆栈内存,也称为堆栈,是由程序的当前执行的函数使用的内
存区域,以便这些函数可以存储数据。存储在堆栈中的数据,以后进先出的方式存储,并且,随着在特定时间执行的函数数量和/或每个函数存储的数据量的增加,堆栈从内存中的起点地址(origin address)增长。从堆栈起点到存储最近存储的数据所在的内存地址的内存地址范围,表示程序的当前堆栈使用量(stack usage)。如果最大堆栈使用量是已知的,则可以保留与最大堆栈使用量相等的内存量,从而确保程序有足够的内存用于执行,而无需不必要地保留超过必需的内存。
[0015]然而,程序的最大堆栈使用量,可能是事先未知的;相反,确定堆栈使用量可能需要在运行时分析程序。确定程序堆栈使用量的常规方法,要求在监测程序下运行程序,在编译或后处理过程中将附加的繁琐的代码链接到程序中,或者以短时间隔检查堆栈水平。这些方法通常会影响或中断程序执行,并且可能非常乏味,因为一个程序可能包含数以干计的函数。因此,测量堆栈使用量的常规技术在客户生产环境中是不可行的。
[0016]相反,本专利技术实施例可以以不需要仪器(或基于计时器的分析的方式来确定程序的最大堆栈使用量和每函数层(per

function level)的堆栈使用量。本专利技术实施例可以在不影响程序执行的情况下确定堆栈使用量,从而提供了一种使得能够在生产环境或其他用例(use

cases)中确定堆栈使用量的实用方法。具体而言,本专利技术实施例利用在大多数编程语言中实现的预先存在的函数跟踪系统,使得每当程序进入和/或退出函数时都能够自动捕获堆栈使用量数据。此外,本专利技术实施例可以完全地收集对应于程序的所有用例的数据,包括代表程序状态的变量和数据,从而通过使用户能够快速找到与其自己的堆栈跟踪密切匹配的代码来改进调试过程。
[0017]因此,本专利技术实施例提供了用于确定程序堆栈使用量的改进技术。一旦知道最大堆栈使用量,就可以对程序进行优化,使程序只使用执行所需的堆栈量,同时还可以避免潜在的堆栈溢出错误或堆栈用尽故障。此外,本专利技术实施例可以收集通常不可获得的与程序执行有关的数据,包括说明变量或程序状态的执行路径,这改进了调试,因为可以获取程序执行的详尽概述。因此,本专利技术实施例通过减少程序消耗的计算资源量、通过增加程序的稳定性以及通过提供改进的调试技术,提供了改进计算领域的实际应用。
[0018]应当注意,本说明书中对特征、优点或类似语言的提及,并不意味着通过本文所公开的实施例可以实现的所有特征和优点,均存在于或应当存在于本专利技术的任何单个实施例中。相反,应当理解,提及特征和优点的语言意味着结合实施例描述的特定特征、优点或特性,包括在本专利技术的至少一个实施例中。因此,贯穿本说明书对特征、优点和类似语言的讨论,可能但不一定涉及同一实施例。
[0019]此外,可以在一个或多个实施例中以任何适当的方式组合本专利技术的所述特征、优点和特征。相关领域的技术人员将认识到,可以在没有特定实施例的一个或多个特定特征或优点的情况下实施本专利技术。在其他情况下,在某些实施例中可识别出可能未在本专利技术的所有实施例中出现的其他特征和优点。
[0020]这些特征和优点将更显见于以下附图、描述和所附权利要求,或者可以通过实践下文所述的本专利技术实施例而习得。
[0021]现在将参考附图详细描述本专利技术实施例。图1是描述根据本专利技术实施例的用于确定堆栈使用量的计算环境100的框图。如图所示,计算环境100包括客户端设备105、调试服务器140和网络160。应当理解,计算环境100的组件之间的功能划分是为了解释本专利技术实施
例而选择的,不应被解释为限制性示例。
[0022]客户端设备105包括网络接口(I/F)106、至少一个处理器107、存储器110和数据库135。存储器110可以包括编译器模块115、程序120、标记分析模块125和测试模块130。客户端设备105可以包括膝上型计算机、平板计算机、笔记本计算机、个人计算机(PC)、台式计算机、个人数字助理(PDA)、智能电话、瘦客户端或能够执行计算机可读程序指令的任何可编程电子设备。网络接口106使得客户端设备105的组件能够通过网络(例如网络160)发送和接收数据。一般而言,客户端设备105支持软件应用程序的开发、应用程序堆栈使用量的确定和应用程序的优化。客户端设备105可以包括如关于图8进一步详细示出和描述的内部和外部硬件组件。
[0023]编译器模块115、程序120、标记分析模块125和测试模块130可以包括用以执行下面描述的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于监测堆栈使用量的计算机实现方法,该方法包括:执行截获函数以在堆栈中存储堆栈标记,其中,当程序进入或退出程序的多个函数的每个函数时调用截获函数;在程序执行期间识别堆栈中的多个堆栈标记并确定每个堆栈标记的内存地址,以获取多个内存地址;分析所述多个内存地址以识别与最大堆栈深度相关联的特定内存地址;和基于最大堆栈深度确定程序的堆栈使用量。2.根据权利要求1所述的计算机实现方法,还包括:将特定函数的堆栈标记的第一内存地址与与特定函数的调用方函数相关联的第二堆栈标记的第二内存地址进行比较,以确定特定函数的每函数堆栈使用量。3.根据权利要求2所述的计算机实现方法,还包括:确定所述多个函数中每个函数的每函数堆栈使用量。4.根据权利要求1所述的计算机实现方法,其中,调用截获函数使截获函数获取以下的一个或多个:函数名、线程标识符和进程标识符。5.根据权利要求1所述的计算机实现方法,还包括:生成与程序对应的优化...

【专利技术属性】
技术研发人员:N
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:

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

1