堆栈结构和函数调用方法及系统技术方案

技术编号:29614240 阅读:16 留言:0更新日期:2021-08-10 18:27
本申请涉及操作系统程序运行中函数调用技术领域,公开了一种堆栈结构和函数调用方法及系统,能够在调用函数中快速的寻找到被调用函数,提高操作系统的运行效率。该方法包括:预先为每个函数调用分配预设字节的地址空间用于存储其堆栈帧,该堆栈帧存储有对应函数调用的被调用函数的对象句柄,该对象句柄中包含被调用函数所属对象类型、变量类型偏移值、栈偏移值、堆栈类型指示器和主要类型指示器;执行当前函数调用,调用函数利用该对象句柄调用该被调用函数;在该调用函数中执行所调用的被调用函数。

【技术实现步骤摘要】
堆栈结构和函数调用方法及系统
本申请涉及操作系统程序运行中函数调用的
,特别涉及函数调用过程中寄存器的使用以及堆栈帧中的内存分配技术。
技术介绍
在计算机程序运行时,计算机会使用栈来进行程序数据的动态存储,其中堆栈帧是指栈中存储函数调用信息(如函数名称,局部变量等信息)的空间。为快速寻找每个函数对应堆栈帧的起终位置,将堆栈帧的地址存储于寄存器中,因此寄存器和堆栈帧成为了程序运行必不可少的结构。对于经典的复杂指令集操作系统而言,栈总是向下增长的。寄存器esp始终指向栈顶,寄存器ebp指向一个固定位置,不随函数执行而变化,其堆栈帧结构如图1所示。现有的程序运行中内存中的堆栈帧结构是向下增长,即栈底在上,栈顶在下,容易混淆栈底和栈帧的概念。同时现有的堆栈帧结构保存的内容,分类不够详尽,并且对于每个函数分配的地址空间不确定,都会降低操作系统的计算效率。
技术实现思路
本申请的目的在于提供一种堆栈结构和基于该堆栈结构的函数调用方法及系统,能够在调用函数中快速的寻找到被调用函数,提高操作系统的运行效率。本申请公开了一种函数调用方法,包括以下步骤:预先为每个函数调用分配预设字节的地址空间用于存储其堆栈帧,所述堆栈帧存储有对应函数调用的被调用函数的对象句柄,所述对象句柄中包含所述被调用函数所属对象类型、变量类型偏移值、栈偏移值、堆栈类型指示器和主要类型指示器;执行当前函数调用,调用函数利用所述对象句柄调用所述被调用函数;在所述调用函数中执行所调用的被调用函数。在一个优选例中,所述变量类型偏移值包括寄存器偏移值、线型偏移值和内存偏移值。在一个优选例中,还包括以下步骤:在未执行所述被调用函数时,将寄存器bp指向所述调用函数的栈顶的位置以及将寄存器sp指向所述调用函数的栈底的下一个字节的位置;在执行所述被调用函数时,将所述寄存器bp指向所述被调用函数的栈顶的位置。在一个优选例中,在执行函数返回时,还包括以下步骤:将寄存器sp指向当前寄存器bp指向的地址空间,同时将当前寄存器bp指向地址空间存储的内容赋给寄存器bp。在一个优选例中,所述预设字节长度≥13个字节长度;所述堆栈帧包括所述调用函数的堆栈帧部分和所述被调用函数的堆栈帧部分;所述被调用函数的堆栈帧部分占用12个字节的地址空间,用于依次存储原有bp值、所述调用函数的名字、所述调用函数的函数返回地址、所述被调用函数的返回值和所述被调用函数的对象句柄。在一个优选例中,所述堆栈帧的结构为栈底在下,栈顶在上;所述执行当前函数调用时,还包括步骤:所述堆栈帧的存储信息依次向下增长。本申请还公开了一种函数调用系统,包括:分配模块,用于预先存储每个函数调用分配预设字节的地址空间用于存储其堆栈帧,所述堆栈帧包括对应函数调用的被调用函数的对象句柄,所述对象句柄中包含被调用函数所属对象类型、变量类型偏移值、栈偏移值、堆栈类型指示器和主要类型指示器;函数调用模块,用于执行当前函数调用,调用函数利用所述对象句柄调用所述被调用函数,并且在所述调用函数中执行所调用的被调用函数。在一个优选例中,所述变量类型偏移值包括寄存器偏移值,线型偏移值和内存偏移值;所述函数调用系统还包括寄存单元,所述寄存单元包括寄存器bp和寄存器sp,其中,所述寄存器bp被配置为在未执行所述被调用函数时指向所述调用函数的栈顶的位置并且在执行所述被调用函数时,将所述寄存器bp指向所述被调用函数的栈顶的位置,所述寄存器sp被配置为在未执行所述被调用函数时指向所述调用函数的栈底的下一个字节的位置。本申请还公开了一种堆栈结构,用于每个函数调用的程序执行过程;所述堆栈结构包括占用预设字节的地址空间的堆栈帧,所述堆栈帧被配置为存储有对应函数调用的被调用函数的对象句柄,所述对象句柄中包含被调用函数所属对象类型、变量类型偏移值、栈偏移值、堆栈类型指示器和主要类型指示器;在执行每个函数调用时,对应的调用函数利用所述对象句柄调用所述被调用函数。在一个优选例中,所述变量类型偏移值包括寄存器偏移值,线型偏移值和内存偏移值;所述堆栈结构包括寄存单元,所述寄存单元包括寄存器bp和寄存器sp,其中,所述寄存器bp被配置为在未执行所述被调用函数时指向所述调用函数的栈顶的位置并且在执行所述被调用函数时,将所述寄存器bp指向所述被调用函数的栈顶的位置,所述寄存器sp被配置为在未执行所述被调用函数时指向所述调用函数的栈底的下一个字节的位置。本申请实施方式中,至少包含以下优点和有益效果:本专利技术堆栈帧的结构分类更为详尽,包含了被调用函数所属对象的对象句柄,其对被调用函数所属对象的类型,内存结构及指针进行存储,能够在调用函数过程中快速的识别到被调用函数,提高函数调用的执行效率,进而操作系统的运行效率。同时对每一个被调用函数都分配固定字节的地址空间用于存储其堆栈帧,固定的地址空间大小以及详细的对象句柄,使得调用函数时操作系统运行更加高效。进一步地,配置函数调用时bp,sp两个寄存器的适应性位置指向,bp寄存器始终指向堆栈帧栈底,sp寄存器指向堆栈帧栈顶的下一个地址空间,进一步提高函数调用的执行效率,进而操作系统的运行效率。此外,设置向上增长的堆栈帧结构,方便计算地址空间,分辨栈底,栈顶。本申请的说明书中记载了大量的技术特征,分布在各个技术方案中,如果要罗列出本申请所有可能的技术特征的组合(即技术方案)的话,会使得说明书过于冗长。为了避免这个问题,本申请上述
技术实现思路
中公开的各个技术特征、在下文各个实施方式和例子中公开的各技术特征、以及附图中公开的各个技术特征,都可以自由地互相组合,从而构成各种新的技术方案(这些技术方案均因视为在本说明书中已经记载),除非这种技术特征的组合在技术上是不可行的。例如,在一个例子中公开了特征A+B+C,在另一个例子中公开了特征A+B+D+E,而特征C和D是起到相同作用的等同技术手段,技术上只要择一使用即可,不可能同时采用,特征E技术上可以与特征C相组合,则,A+B+C+D的方案因技术不可行而应当不被视为已经记载,而A+B+C+E的方案应当视为已经被记载。附图说明图1是一种经典操作系统堆栈帧结构示意图。图2A是根据本申请一个实施例的处于未执行被调用函数的堆栈结构示意图。图2B是根据本申请一个实施例的处于执行被调用函数的堆栈结构示意图。图3是根据本申请的一个实施例的被调用函数对象句柄结构示意图。图4是根据本申请第二实施方式的函数调用方法流程示意图。图5是一种程序调用函数运行过程示意图。图6是根据本申请第三实施方式的函数调用系统结构示意图。具体实施方式在以下的叙述中,为了使读者更好地理解本申请而提出了许多技术细节。但是,本领域的普通技术人员可以理解,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保本文档来自技高网
...

【技术保护点】
1.一种函数调用方法,其特征在于,包括以下步骤:/n预先为每个函数调用分配预设字节的地址空间用于存储其堆栈帧,所述堆栈帧存储有对应函数调用的被调用函数的对象句柄,所述对象句柄中包含所述被调用函数所属对象类型、变量类型偏移值、栈偏移值、堆栈类型指示器和主要类型指示器;/n执行当前函数调用,调用函数利用所述对象句柄调用所述被调用函数;/n在所述调用函数中执行所调用的被调用函数。/n

【技术特征摘要】
1.一种函数调用方法,其特征在于,包括以下步骤:
预先为每个函数调用分配预设字节的地址空间用于存储其堆栈帧,所述堆栈帧存储有对应函数调用的被调用函数的对象句柄,所述对象句柄中包含所述被调用函数所属对象类型、变量类型偏移值、栈偏移值、堆栈类型指示器和主要类型指示器;
执行当前函数调用,调用函数利用所述对象句柄调用所述被调用函数;
在所述调用函数中执行所调用的被调用函数。


2.如权利要求1所述的函数调用方法,其特征在于,所述变量类型偏移值包括寄存器偏移值、线型偏移值和内存偏移值。


3.如权利要求1所述的函数调用方法,其特征在于,还包括以下步骤:
在未执行所述被调用函数时,将寄存器bp指向所述调用函数的栈顶的位置以及将寄存器sp指向所述调用函数的栈底的下一个字节的位置;
在执行所述被调用函数时,将所述寄存器bp指向所述被调用函数的栈顶的位置。


4.如权利要求3所述的函数调用方法,其特征在于,在执行函数返回时,还包括以下步骤:
将寄存器sp指向当前寄存器bp指向的地址空间,同时将当前寄存器bp指向地址空间存储的内容赋给寄存器bp。


5.如权利要求1所述的函数调用方法,其特征在于,所述预设字节长度≥13个字节长度;
所述堆栈帧包括所述调用函数的堆栈帧部分和所述被调用函数的堆栈帧部分;
所述被调用函数的堆栈帧部分占用12个字节的地址空间,用于依次存储原有bp值、所述调用函数的名字、所述调用函数的函数返回地址、所述被调用函数的返回值和所述被调用函数的对象句柄。


6.如权利要求1-5中任一项所述的函数调用方法,其特征在于,所述堆栈帧的结构为栈底在下,栈顶在上;
所述执行当前函数调用时,还包括步骤:所述堆栈帧的存储信息依次向下增长。


7.一种函数调用系统,其特征在于...

【专利技术属性】
技术研发人员:陈磊边立剑
申请(专利权)人:上海安路信息科技股份有限公司
类型:发明
国别省市:上海;31

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

1