CN104641347A - 函数调用方法、装置和终端设备 - Google Patents
函数调用方法、装置和终端设备 Download PDFInfo
- Publication number
- CN104641347A CN104641347A CN201380000378.5A CN201380000378A CN104641347A CN 104641347 A CN104641347 A CN 104641347A CN 201380000378 A CN201380000378 A CN 201380000378A CN 104641347 A CN104641347 A CN 104641347A
- Authority
- CN
- China
- Prior art keywords
- function
- instruction
- buffer memory
- data
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例提供了一种函数调用方法、装置和终端设备,涉及计算机技术领域,所述方法包括:当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;根据所述调用函数指令调用第二函数;当所述第二函数运行结束时,将所述第一函数的数据和指令解锁。本发明通过在发生函数调用时,将第一函数的数据和指令锁定在缓存中,当第二函数运行结束时,再将该第一函数的数据和指令解锁,避免了在发生函数调用时该第一函数的数据和指令在该缓存中被替换的问题,减小了后续返回第一函数时的高速缓存缺失率,提高了程序运行速度和系统性能。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种函数调用方法、装置和终端设备。
背景技术
函数的调用和被调用是软件编程时常用的方法,通过调用函数可以实现模块化程序设计,使程序结构更加清晰,并且每个模块都可以独立设计,便于实现大程序。
在函数运行时,将函数的数据和指令从主存加载到缓存,当在运行当前函数的过程中发生函数调用时,PC(Program Counter,程序计数器)指针从主调函数跳向被调用函数,开始运行被调用函数,被调用函数在运行时,需要将被调用函数的数据和指令加载到缓存中。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
在加载被调用函数的数据和指令的过程或被调用函数的运行过程中,主调函数的数据和指令均可能会被替换,当被调用函数运行结束,PC指针返回到主调函数时,可能出现缓存缺失(Cache miss),需要重新将主调函数的数据和指令加载到缓存,降低了程序运行的速度,影响操作性能,提高了CPU的负载率。
发明内容
为了解决出现缓存缺失的问题,本发明实施例提供了一种函数调用的方法、装置和终端设备。所述技术方案如下:
第一方面,提供了一种函数调用方法,所述方法包括:
当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;
根据所述调用函数指令调用第二函数;
当所述第二函数运行结束时,将所述第一函数的数据和指令解锁。
假设上述为第一方面的第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中,包括:
当接收到调用函数指令,所述第一函数包含锁定标识时,将所述第一函数的数据和指令锁定在所述缓存中;
或,
当接收到调用函数指令,所述第一函数包含锁定指令时,将所述第一函数的数据和指令锁定在所述缓存中。
在第一种可能的实施方式作为基础而提供的第三种可能的实施方式中,所述当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中之前,所述方法还包括:
当所述第一函数的调用次数超过预设阈值时,确定所述第一函数为频繁调用函数;
在所述第一函数中设置锁定标识,所述锁定标识用于指示编译器在接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;
或,
在所述第一函数的指令中嵌入锁定指令,所述锁定指令用于将第一函数的数据和指令锁定在缓存中。
结合上述任一可能的实现方式,本发明实施例的第四种可能实现方式中,所述当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中包括:
当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和当前PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址。
在第一种、第二种和第三种任一项可能的实施方式作为基础而提供的第五种可能的实施方式中,所述当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中包括:
当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和第一PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址,所述第一PC指针为当前PC指针与预设间隔之和。
第二方面,提供了一种函数调用装置,所述装置包括:
锁定模块,用于当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;
调用函数模块,用于根据所述调用函数指令调用第二函数;
解锁模块,用于当所述第二函数运行结束时,将所述第一函数的数据和指令解锁。
假设上述为第二方面的第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述锁定模块包括:
第一锁定单元,用于当接收到调用函数指令,所述第一函数包含锁定标识时,将所述第一函数的数据和指令锁定在所述缓存中;
第二锁定单元,用于当接收到调用函数指令,所述第一函数包含锁定指令时,将所述第一函数的数据和指令锁定在所述缓存中。
在第一种可能的实施方式作为基础而提供的第三种可能的实施方式中,所述装置还包括:
频繁函数确定模块,用于当所述第一函数的调用次数超过预设阈值时,确定所述第一函数为频繁调用函数;
标识设置模块,用于在所述第一函数中设置锁定标识,所述锁定标识用于指示编译器在接收到调用函数指令时,将所述第一函数的数据和指令锁定在所述缓存中;
指令嵌入模块,用于在所述第一函数的指令中嵌入锁定指令,所述锁定指令用于将所述第一函数的数据和指令锁定在所述缓存中。
结合上述任一可能的实现方式,本发明实施例的第四种可能实现方式中,所述锁定模块包括:
第三锁定单元,用于当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和当前PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址。
在第一种、第二种和第三种任一项可能的实施方式作为基础而提供的第五种可能的实施方式中,所述锁定模块包括:
第四锁定单元,用于当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和第一PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址,所述第一PC指针为当前PC指针与预设间隔之和。
第三方面,提供了一种终端设备,包括:处理器和存储器,所述处理器和所述存储器耦合,
处理器,用于当接收到调用函数指令时,将第一函数的数据和指令锁定在所述存储器中;
所述处理器,还用于根据所述调用函数指令调用第二函数;
所述处理器,还用于当所述第二函数运行结束时,将所述存储器中锁定的所述第一函数的数据和指令解锁。
本发明实施例提供的技术方案的有益效果是:
本发明实施例提供的方法、装置和终端设备,通过当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;根据该调用函数指令调用第二函数;当该第二函数运行结束时,将该第一函数的数据和指令解锁。采用本发明的技术方案,通过在发生函数调用时,将第一函数的数据和指令锁定在缓存中,当第二函数运行结束时,再将该第一函数的数据和指令解锁,避免了在发生函数调用时该第一函数的数据和指令在该缓存中被替换的问题,减小了后续返回第一函数时的高速缓存缺失率,提高了程序运行速度和系统性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种函数调用方法的流程图;
图2是本发明实施例提供的一种函数调用方法的流程图;
图3是本发明实施例提供的一种函数锁定示意图;
图4是本发明实施例提供的一种函数调用装置的结构示意图;
图5是本发明实施例提供的一种终端设备的结构方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例中,终端设备指向用户提供语音和/或数据连通性的设备,包括无线终端或有线终端。无线终端可以是具有无线连接功能的手持式设备、或连接到无线调制解调器的其他处理设备,经无线接入网与一个或多个核心网进行通信的移动终端。例如,无线终端可以是移动电话(或称为“蜂窝”电话)和具有移动终端的计算机。又如,无线终端也可以是便携式、袖珍式、手持式、计算机内置的或者车载的移动装置。再如,无线终端可以为移动站(英文为:mobile station)、接入点(英文为:access point)、或用户装备(英文为:userequipment,简称UE)等。
图1是本发明实施例提供的一种函数调用方法的流程图。该实施例的执行主体为终端设备,参见图1,所述方法包括:
101:当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;
其中,该调用函数指令包括被调用函数的函数名称,如float f(float b)指令表示以float b为实际参数调用函数f,并将返回值转换为float类型返回。
该数据包括该第一函数在运行过程中的本地变量、传递参数和返回指针等数据,该指令包括该第一函数在运行过程中的该调用函数指令之前的指令。
在本发明实施例中,在开始运行该第一函数时,将该第一函数的数据和指令从主存中加载到该缓存中,当接收到该调用函数指令时,将该第一函数的数据和指令锁定在该缓存中,使得第一函数的数据和指令不能够被其他数据或指令替换。
102:根据该调用函数指令调用第二函数;
其中,该调用函数指令包括被调用函数的名称,在本发明实施例中,将该被调用函数统称为第二函数,也即是根据该调用函数指令,调用该第二函数,PC指针跳转至第二函数时,运行第二函数。在运行该第二函数时,将该第二函数的数据和指令加载到该缓存中,此时,由于已经将该第一函数的数据和指令锁定在该缓存中,因此在加载该第二函数的数据和指令的过程中,该第一函数的数据和指令在该缓存中不会被替换,避免了由于第一函数的数据和指令被替换而造成的缓存缺失等问题。
103:当该第二函数运行结束时,将该第一函数的数据和指令解锁。
当该第二函数包括具有返回值的返回(return)指令时,当第二函数运行至return指令,则第二函数运行结束,向调用第二函数的第一函数传递返回值;
当第二函数包括不具有返回值的return指令时,当第二函数运行至return指令,则第二函数运行结束;
当第二函数不包括return指令,且第二函数中的指令均运行结束时,则第二函数运行结束。
相应地,当运行到该第二函数的return指令或第二函数中的指令均运行结束时,该第二函数运行结束,将该第一函数的数据和指令从锁定状态切换至解锁状态。
本发明实施例提供的方法,通过当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;根据该调用函数指令调用第二函数;当该第二函数运行结束时,将该第一函数的数据和指令解锁。采用本发明的技术方案,通过在发生函数调用时,将第一函数的数据和指令锁定在缓存中,当第二函数运行结束时,再将该第一函数的数据和指令解锁,避免了在发生函数调用时该第一函数的数据和指令在该缓存中被替换的问题,减小了后续返回第一函数时的高速缓存缺失率,提高了程序运行速度和系统性能。
可选地,当接收到调用函数指令时,将该第一函数的数据和指令锁定在缓存中,包括:
当接收到调用函数指令,该第一函数包含锁定标识时,将该第一函数的数据和指令锁定在该缓存中;
或,
当接收到调用函数指令,该第一函数包含锁定指令时,将该第一函数的数据和指令锁定在该缓存中。
可选地,当接收到调用函数指令时,将该第一函数的数据和指令锁定在缓存中之前,该方法还包括:
当该第一函数的调用次数超过预设阈值时,确定该第一函数为频繁调用函数;
在该第一函数中设置锁定标识,该锁定标识用于指示编译器在接收到调用函数指令时,将该第一函数的数据和指令锁定在该缓存中;
或,
在该第一函数的指令中嵌入锁定指令,该锁定指令用于将该第一函数的数据和指令锁定在该缓存中。
可选地,当接收到调用函数指令时,将该第一函数的数据和指令锁定在缓存中,包括:
当接收到调用函数指令时,将该第一函数在该缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在该缓存中,并将辅助PC指针和当前PC指针对应的地址之间缓存的指令锁定在该缓存中,该辅助PC指针用于记录该第一函数的入口地址。
可选地,当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中包括:
当接收到调用函数指令时,将该第一函数在该缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在该缓存中,并将辅助PC指针和第一PC指针对应的地址之间缓存的指令锁定在该缓存中,该辅助PC指针用于记录该第一函数的入口地址,该第一PC指针为当前PC指针与预设间隔之和。
可选地,函数运行之前,技术人员可通过在编写代码的过程中对函数进行设置,以确定需要锁定的函数,该设置过程具体如下:
(一)当该第一函数的调用次数超过预设阈值时,确定该第一函数为频繁调用函数;
其中,该第一函数的调用次数是指在整体的程序代码中,该第一函数的使用次数,即为调用该第一函数的次数。
若该第一函数的调用次数超过预设阈值,则认为在运行程序代码的过程中需要多次使用该第一函数,此时确定该第一函数为频繁调用函数,其中,该预设阈值可以由开发人员设置。
本发明实施例中,当确定该第一函数为频繁调用函数时,则为保证该第一函数的数据和指令不会被替换,需要在该第一函数调用该第二函数时,将该第一函数的数据和指令锁定在缓存中,因此,可以采用步骤(二)或步骤(三)的任一种方式,使得在程序运行时可以实现将该第一函数的数据和指令锁定在该缓存中。
另外,当该第一函数的调用次数超过预设阈值时,可以由技术人员在该第一函数中设置锁定标识或在该第一函数中嵌入锁定指令,便于指示该第一函数为需要锁定的函数,而当第一函数的调用次数小于或等于该预设阈值时,如第一函数为初始化函数、程序入口函数等,则不需要在发生函数调用时对其进行锁定,则可以不对第一函数进行锁定标识或锁定指令的设置。
(二)在该第一函数中设置锁定标识,该锁定标识用于指示编译器在接收到该锁定标识时,将该第一函数的数据和指令锁定在该缓存中。
在对第一函数的编译过程中,当编译器接收到调用函数指令和该锁定标识时,会在第一函数起始位置插入相应的锁定指令,用来指示将该第一函数的数据和指令锁定在该缓存中。该锁定标识可以设置在该调用函数指令之前,使得在该第一函数调用该第二函数时,即编译器接收到该调用函数指令且该第一函数中包含锁定标识,触发对向第一函数插入相应的锁定指令的过程,将该第一函数的数据和指令锁定在该缓存中。
(三)在该第一函数的指令中嵌入锁定指令,该锁定指令用于将该第一函数的数据和指令锁定在该缓存中。
在该第一函数的程序代码中嵌入该锁定指令,如lock指令,当程序运行至该锁定指令时,将该第一函数的数据和指令锁定在该缓存中。
本发明实施例中,该锁定指令可以设置在该调用函数指令之前,使得程序运行时先运行至该锁定指令,将该第一函数的数据和指令锁定在该缓存中,再运行至该调用函数指令,调用该第二函数。
图2是本发明实施例提供的一种函数调用方法的流程图。参见图2,所述方法包括:
201:终端设备在运行第一函数的过程中,接收调用函数指令(call指令);
需要说明的是,第一函数根据预先设置的不同,可以分为需要锁定的函数和不需要锁定的函数,需要锁定的函数即为频繁调用函数,当在运行过程中可以通过第一函数是否包含该锁定标识或该锁定指令来确定第一函数是否为需要锁定的函数,当该第一函数既不包含该锁定标识,也不包含该锁定指令时,则该第一函数是不需要锁定的函数。
202:当接收到调用函数指令,该第一函数包含锁定标识时,将该第一函数的数据和指令锁定在该缓存中;
该步骤202具体可以由终端设备的编译器进行,当编译器在编译第一函数的过程中读取到锁定标识时,可将该锁定标识编译为表示锁定指令的机器语言,从而将该第一函数的数据和指令锁定在该缓存中。
203:当接收到调用函数指令,该第一函数包含锁定指令时,将该第一函数的数据和指令锁定在该缓存中;
优选地,该锁定指令为与第一函数的编译方法一致的机器语言,具体用于指示进行锁定过程,则当第一函数运行至锁定指令,并接收到调用函数指令时,将该第一函数的数据和指令锁定在该缓存中。
需要说明的是,该锁定指令与该调用函数指令在第一函数中的前后顺序可以是同时运行,也可以是一前一后运行,在本发明实施例中对其具体的前后顺序不做限定。
优选地,步骤202和203中的将该第一函数的数据和指令锁定在该缓存中具体包括:将该第一函数在该缓存中的前栈帧指针和堆栈指针之间的数据锁定在该缓存中,将辅助PC指针记录的地址和当前PC指针指向的地址之间的指令锁定在该缓存中。
在程序运行过程中,每一个未完成运行的函数均对应一个栈帧,栈帧中保存相应函数的数据和指令,栈帧指针(frame pointer)指向栈帧的底部。本发明实施例中,在运行该第一函数的过程中,该第一函数的数据存储在堆栈中,栈帧指针指向该第一函数对应的栈帧的底部,堆栈指针指向该第一函数对应的栈帧的顶部。当第一函数调用第二函数时,第一函数的堆栈指针变为第二函数的栈帧指针。锁定的范围即为第二函数的栈帧指针(第一函数的堆栈指针)和第一函数的栈帧指针(前栈帧指针(previous frame pointer))之间的堆栈数据。。
另外,PC指针用于指向当前运行函数的入口地址,当接收到调用函数指令时,该PC指针根据该调用函数指令,从当前该第一函数的入口地址跳转至该第二函数的入口地址,即当接收到该调用函数指令,当前PC指针指向该第二函数的入口地址;该辅助PC指针用于记录该当前运行的第一函数的入口地址,则该辅助PC指针记录的地址和当前PC指针指向的地址之间缓存的指令即为该第一函数中该调用函数指令之前的指令,则将该第一函数的指令锁定在该缓存中具体为将辅助PC指针记录的地址和当前PC指针指向的地址之间的指令锁定在该缓存中。
可选地,在程序运行过程中,终端设备自动加载还未运行的下一个高速缓存块的指令,因此当该第一函数执行至调用函数指令之前的指令时,终端设备已加载该指令之后预设间隔的指令,则将该第一函数的指令锁定在该缓存中还可以为将辅助PC指针记录的地址和当前PC指针与预设间隔之和指向的地址之间的指令锁定在该缓存中。优选地,该预设间隔为16,具体过程为当该第一函数执行至第n条指令时,终端设备自动加载下一个高速缓存块的指令,当高速缓存块的长度为64字节,指令宽度为32比特时,则自动加载第n+1条至第n+16条指令,因此接收到调用函数指令时,将辅助PC指针记录的地址与当前PC指针加16指向的地址之间的指令锁定,保证了已加载的该第一函数的指令不会被替换。
需要说明的是,上述任一种锁定方式均通过软件编程的接口实现,而在本发明实施例中,该锁定过程还可以通过应用硬件实现,避免了该锁定指令与针对该缓存的加载、存储或提取等指令的冲突。
另外,当该第一函数不包含锁定标识且第一函数不包含锁定指令时,在运行该第二函数的过程中可以采用逐出缓存的方式对第一函数的数据和指令进行替换。
图3是本发明实施例提供的一种函数锁定示意图,其中,函数调用关系为函数1调用函数2、函数2调用函数3、函数3调用函数4和函数5。
由于函数1为主函数,调用次数很少,所以不需要将函数1的数据和指令锁定。在程序运行过程中,实际的运行过程是频繁的在函数2、函数3、函数4和函数5之间切换进行,因此当发生函数调用时需要将函数2、函数3、函数4和函数5的数据和指令锁定。
基于图3的示例,在函数2调用函数3时,即在运行函数2的过程中接收到调用函数函数3的指令时,将函数2在该缓存中的前栈帧指针和堆栈指针之间的数据锁定在该缓存中,另外,该辅助PC指针记录函数2的入口地址,该当前PC指针指向函数3的入口地址,将辅助PC指针记录的地址和当前PC指针指向的地址之间的指令锁定在该缓存中。
204:根据该调用函数指令调用第二函数;
本领域技术人员可以获知,对第二函数的调用即是运行第二函数。
205:当该第二函数运行结束时,将该第一函数的数据和指令解锁。
当该第二函数运行结束时,也即是当第二函数返回后,对被锁定的第一函数的数据和指令进行解锁操作,以保证整个软件工程的运行有充足的缓存资源。
具体地,将该缓存中的前栈帧指针和堆栈指针之间的数据解锁,并将辅助PC指针记录的地址和当前PC指针指向的地址之间的指令解锁。
本发明实施例提供的方法,通过当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;根据该调用函数指令调用第二函数;当该第二函数运行结束时,将该第一函数的数据和指令解锁。采用本发明的技术方案,通过在发生函数调用时,将第一函数的数据和指令锁定在缓存中,当第二函数运行结束时,再将该第一函数的数据和指令解锁,避免了在发生函数调用时该第一函数的数据和指令在该缓存中被替换的问题,减小了后续返回第一函数时的高速缓存缺失率,提高了程序运行速度和系统性能,另外通过硬件将该第一函数的数据和指令锁定在缓存中,避免了通过软件或编译器插入的锁定指令与针对缓存操作的指令在流水线上的竞争和冲突。
图4是本发明实施例提供的一种函数调用装置的结构示意图,参见图4,所述装置包括:
锁定模块41,用于当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;
调用函数模块42,用于根据该调用函数指令调用第二函数;
解锁模块43,用于当该第二函数运行结束时,将该第一函数的数据和指令解锁。
可选地,该锁定模块41包括:
第一锁定单元,用于当接收到调用函数指令,该第一函数包含锁定标识时,将该第一函数的数据和指令锁定在该缓存中;
第二锁定单元,用于当接收到调用函数指令,该第一函数包含锁定指令时,将该第一函数的数据和指令锁定在该缓存中。
可选地,该装置还包括:
频繁函数确定模块,用于当该第一函数的调用次数超过预设阈值时,确定该第一函数为频繁调用函数;
标识设置模块,用于在该第一函数中设置锁定标识,该锁定标识用于指示编译器在接收到调用函数指令时,将该第一函数的数据和指令锁定在该缓存中;
指令嵌入模块,用于在该第一函数的指令中嵌入锁定指令,该锁定指令用于将该第一函数的数据和指令锁定在该缓存中。
可选地,该锁定模块41包括:
第三锁定单元,用于当接收到调用函数指令时,将该第一函数在该缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在该缓存中,并将辅助PC指针和当前PC指针对应的地址之间缓存的指令锁定在该缓存中,该辅助PC指针用于记录该第一函数的入口地址。
可选地,该锁定模块41包括:
第四锁定单元,用于当接收到调用函数指令时,将该第一函数在该缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在该缓存中,并将辅助PC指针和第一PC指针对应的地址之间缓存的指令锁定在该缓存中,该辅助PC指针用于记录该第一函数的入口地址,该第一PC指针为当前PC指针与预设间隔之和。
本发明实施例提供的装置,通过当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;根据该调用函数指令调用第二函数;当该第二函数运行结束时,将该第一函数的数据和指令解锁。采用本发明的技术方案,通过在发生函数调用时,将第一函数的数据和指令锁定在缓存中,当第二函数运行结束时,再将该第一函数的数据和指令解锁,避免了在发生函数调用时该第一函数的数据和指令在该缓存中被替换的问题,减小了后续返回第一函数时的高速缓存缺失率,提高了程序运行速度和系统性能。
图5是本发明实施例提供的一种终端设备的结构方框图。参见图5,所述终端设备包括:处理器和存储器,该处理器和该存储器耦合,
处理器51,用于当接收到调用函数指令时,将第一函数的数据和指令锁定在该存储器52中;
该处理器51,还用于根据该调用函数指令调用第二函数;
该处理器51,还用于当该第二函数运行结束时,将该存储器52中锁定的该第一函数的数据和指令解锁。
该处理器51还用于当接收到调用函数指令,该第一函数包含锁定标识时,将该第一函数的数据和指令锁定在该存储器52中;
该处理器51还用于当接收到调用函数指令,该第一函数包含锁定指令时,将该第一函数的数据和指令锁定在该存储器52中。
该处理器51还用于当该第一函数的调用次数超过预设阈值时,确定该第一函数为频繁调用函数;
该处理器51还用于在该第一函数中设置锁定标识,该锁定标识用于指示编译器在接收到调用函数指令时,将该第一函数的数据和指令锁定在该存储器52中;
该处理器51还用于在该第一函数的指令中嵌入锁定指令,该锁定指令用于将该第一函数的数据和指令锁定在该存储器52中。
该处理器51还用于当接收到调用函数指令时,将该第一函数在该存储器52中的前栈帧指针和堆栈指针之间缓存的数据锁定在该存储器52中,并将辅助PC指针和当前PC指针对应的地址之间缓存的指令锁定在该存储器52中,该辅助PC指针用于记录该第一函数的入口地址。
该处理器51还用于当接收到调用函数指令时,将该第一函数在该存储器52中的前栈帧指针和堆栈指针之间缓存的数据锁定在该存储器52中,并将辅助PC指针和第一PC指针对应的地址之间缓存的指令锁定在该存储器52中,该辅助PC指针用于记录该第一函数的入口地址,该第一PC指针为当前PC指针与预设间隔之和。
优选地,该存储器52为高速缓冲存储器。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种函数调用方法,其特征在于,所述方法包括:
当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;
根据所述调用函数指令调用第二函数;
当所述第二函数运行结束时,将所述第一函数的数据和指令解锁。
2.根据权利要求1所述的方法,其特征在于,所述当接收到调用函数指令,将第一函数的数据和指令锁定在缓存中,包括:
当接收到调用函数指令,所述第一函数包含锁定标识时,将所述第一函数的数据和指令锁定在所述缓存中;
或,
当接收到调用函数指令,所述第一函数包含锁定指令时,将所述第一函数的数据和指令锁定在所述缓存中。
3.根据权利要求1所述的方法,其特征在于,所述当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中之前,所述方法还包括:
当所述第一函数的调用次数超过预设阈值时,确定所述第一函数为频繁调用函数;
在所述第一函数中设置锁定标识,所述锁定标识用于指示编译器在接收到调用函数指令时,将所述第一函数的数据和指令锁定在所述缓存中;
或,
在所述第一函数的指令中嵌入锁定指令,所述锁定指令用于将所述第一函数的数据和指令锁定在所述缓存中。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中包括:
当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和当前PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址。
5.根据权利要求1-3任一项所述的方法,其特征在于,所述当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中包括:
当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和第一PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址,所述第一PC指针为当前PC指针与预设间隔之和。
6.一种函数调用装置,其特征在于,所述装置包括:
锁定模块,用于当接收到调用函数指令时,将第一函数的数据和指令锁定在缓存中;
调用函数模块,用于根据所述调用函数指令调用第二函数;
解锁模块,用于当所述第二函数运行结束时,将所述第一函数的数据和指令解锁。
7.根据权利要求6所述的装置,其特征在于,所述锁定模块包括:
第一锁定单元,用于当接收到调用函数指令,所述第一函数包含锁定标识时,将所述第一函数的数据和指令锁定在所述缓存中;
第二锁定单元,用于当接收到调用函数指令,所述第一函数包含锁定指令时,将所述第一函数的数据和指令锁定在所述缓存中。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
频繁函数确定模块,用于当所述第一函数的调用次数超过预设阈值时,确定所述第一函数为频繁调用函数;
标识设置模块,用于在所述第一函数中设置锁定标识,所述锁定标识用于指示编译器在接收到调用函数指令时,将所述第一函数的数据和指令锁定在所述缓存中;
指令嵌入模块,用于在所述第一函数的指令中嵌入锁定指令,所述锁定指令用于将所述第一函数的数据和指令锁定在所述缓存中。
9.根据权利要求6-8任一项所述的装置,其特征在于,所述锁定模块包括:
第三锁定单元,用于当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和当前PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址。
10.根据权利要求6-8所述的装置,其特征在于,所述锁定模块包括:
第四锁定单元,用于当接收到调用函数指令时,将所述第一函数在所述缓存中的前栈帧指针和堆栈指针之间缓存的数据锁定在所述缓存中,并将辅助PC指针和第一PC指针对应的地址之间缓存的指令锁定在所述缓存中,所述辅助PC指针用于记录所述第一函数的入口地址,所述第一PC指针为当前PC指针与预设间隔之和。
11.一种终端设备,其特征在于,包括:处理器和存储器,所述处理器和所述存储器耦合,
处理器,用于当接收到调用函数指令时,将第一函数的数据和指令锁定在所述存储器中;
所述处理器,还用于根据所述调用函数指令调用第二函数;
所述处理器,还用于当所述第二函数运行结束时,将所述存储器中锁定的所述第一函数的数据和指令解锁。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013072415 | 2013-03-11 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104641347A true CN104641347A (zh) | 2015-05-20 |
CN104641347B CN104641347B (zh) | 2018-06-05 |
Family
ID=53218595
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380000378.5A Active CN104641347B (zh) | 2013-03-11 | 2013-03-11 | 函数调用方法、装置和终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104641347B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105607912A (zh) * | 2015-12-24 | 2016-05-25 | 华为技术服务有限公司 | 一种Java对象分配优化方法、装置及设备 |
CN110399316A (zh) * | 2019-06-28 | 2019-11-01 | 苏州浪潮智能科技有限公司 | 一种用于业务系统性能优化的方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101772759A (zh) * | 2007-08-02 | 2010-07-07 | 飞思卡尔半导体公司 | 高速缓存锁定设备及其方法 |
CN101989236A (zh) * | 2010-11-04 | 2011-03-23 | 浙江大学 | 一种指令缓存锁实现方法 |
CN102109975A (zh) * | 2009-12-24 | 2011-06-29 | 华为技术有限公司 | 确定函数调用关系的方法、装置及系统 |
-
2013
- 2013-03-11 CN CN201380000378.5A patent/CN104641347B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101772759A (zh) * | 2007-08-02 | 2010-07-07 | 飞思卡尔半导体公司 | 高速缓存锁定设备及其方法 |
CN102109975A (zh) * | 2009-12-24 | 2011-06-29 | 华为技术有限公司 | 确定函数调用关系的方法、装置及系统 |
CN101989236A (zh) * | 2010-11-04 | 2011-03-23 | 浙江大学 | 一种指令缓存锁实现方法 |
Non-Patent Citations (1)
Title |
---|
曾辉: "最小化最坏执行时间的指令缓存锁定算法", 《武汉大学学报(理学版)》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105607912A (zh) * | 2015-12-24 | 2016-05-25 | 华为技术服务有限公司 | 一种Java对象分配优化方法、装置及设备 |
CN110399316A (zh) * | 2019-06-28 | 2019-11-01 | 苏州浪潮智能科技有限公司 | 一种用于业务系统性能优化的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104641347B (zh) | 2018-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105138382B (zh) | 一种Android系统升级的方法及终端 | |
CN101788906B (zh) | 资源管理方法和系统 | |
CN108121594B (zh) | 一种进程管理方法及装置 | |
US8650537B2 (en) | Optimizing an object-oriented program by transforming invocations of synthetic accessor methods | |
CN102023867B (zh) | 一种终端二次开发装置及二次开发平台构建方法 | |
CN104346148A (zh) | 获取程序性能消耗信息的方法、装置及系统 | |
CN103443763A (zh) | 包含对重写虚拟函数的调用的支持的isa桥接 | |
CN107832059A (zh) | 一种基于Makefile的代码静态分析方法和装置 | |
CN110945475A (zh) | 用于提供可打补丁的rom固件的系统和方法 | |
US9245112B2 (en) | Apparatus and method for managing entitlements to program code | |
CN104317578A (zh) | 基于引擎Lua脚本应用和引擎与Lua脚本相互调用方法及装置 | |
CN104156234A (zh) | 启动多核处理器、bootloader大小端模式自适应的方法及装置 | |
CN109086183A (zh) | 一种应用程序的监控方法、装置、电子设备及存储介质 | |
CN102667714A (zh) | 支持访问由操作系统环境外的资源提供的功能的方法和系统 | |
CN103067909B (zh) | 实现锁卡的方法及装置 | |
CN110795091A (zh) | 一种模块化路由解耦方法、存储介质、电子设备及系统 | |
CN105404546A (zh) | 基于rdma和htm的分布式并发控制方法 | |
CN104641347A (zh) | 函数调用方法、装置和终端设备 | |
CN100464300C (zh) | 基于arm的二进制执行环境平台及利用它的加载方法 | |
CN105893031A (zh) | 一种缓存操作实现方法、业务层方法的调用方法及装置 | |
CN109710278A (zh) | 一种卸载应用程序的方法、装置及终端设备 | |
CN102016803B (zh) | 操作系统快速运行命令 | |
CN115022312A (zh) | 多智能合约引擎的实现方法、装置、电子设备及存储介质 | |
CN110960858B (zh) | 一种游戏资源的处理方法、装置、设备及存储介质 | |
CN107368738A (zh) | 一种智能设备的防Root方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |