[发明专利]一种调用函数的方法及系统无效
申请号: | 200710086918.2 | 申请日: | 2007-03-20 |
公开(公告)号: | CN101271402A | 公开(公告)日: | 2008-09-24 |
发明(设计)人: | 张宇;李建斌;徐志贤 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F9/46 | 分类号: | G06F9/46 |
代理公司: | 北京集佳知识产权代理有限公司 | 代理人: | 马敬;逯长明 |
地址: | 518129广东省*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 调用 函数 方法 系统 | ||
技术领域
本发明涉及软件开发技术领域,特别涉及一种调用函数的方法及系统。
背景技术
目前大的项目开发中,通常做法是按功能模块分工开发,最后提供功能函数库给上层应用程序调用,形成一个完整的系统。
包含了很多函数和变量的目标代码的文件被称为“库”,库目前分为静态库和动态库。
静态库:其结构比较简单,是将所有目标代码放在一起,链接时链接程序根据每一份目标代码的符号表查找相应的符号(函数和变量的名字),若查找到则将该函数里面需要定位的符号进行定位,然后将整块函数代码放进可执行文件里,若找不到则报错退出。
使用静态库时,由于链接后产生的可执行文件包含了所有需要调用函数的代码,因此占用磁盘空间比较大;而且,如果有多个调用相同库函数的进程在内存中同时运行,则内存中就存在多份相同的库函数代码,因此占用内存空间比较多;静态库一经改动所有调用此静态库的函数模块都需重新编译。
动态库:其引入就是为了解决静态库的问题所产生的,其加载方式有下面两种:
a)静态绑定
使用静态绑定的程序在一开始载入内存时,主控程序就会把程序所有调用到的动态代码的地址算出、确定下来,也即启动时将所有可能用到的函数加载到内存。这种方式使得程序的初始化比较长,不过初始化成功后,程序的运行速度比较快。
b)动态绑定
使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,主控程序才计算动态代码的逻辑地址。
目前最常用的是使用动态库的动态绑定方式,因为其可以实现调用的灵活性。即在调用处用dlopen()函数开启动态库,并用dlsym()函数调出动态库中的函数符号进行使用,使用完毕后用dlclose()函数关闭动态库。下面以Unix环境下,需调用test()函数为例进行说明,参见图1,其是现有应用动态绑定的方式调用函数的流程示意图。
步骤101,加载主控程序。
步骤102,通过dlopen()函数获取调用libtest.so动态库的句柄A。
步骤103,根据句柄A和待调用的test()函数名,用dlsym()函数获取test()函数对应的句柄B。
步骤104,根据句柄B执行test()函数,执行完毕后调用dlclose()函数关闭此句柄。
至此,实现动态绑定方式下的test()函数的调用。
动态库的动态绑定技术虽然实现了动态库函数的灵活调用,但是在实现过程中,发明人发现至少存在如下问题:
1)对于用户来说函数的调用并不可控制,因为函数的调用都已经固化在主控程序的代码中不能更改。
2)由于在调用动态库函数时,需要调用dlopen(),dlSym()等函数获得动态库中的函数句柄,这在运行过程中都比较消耗性能,因此动态绑定使其运行期性能比较低。
3)无法支持用户的二次开发,这是因为,从上例可以看出test()函数所在动态库,以及函数的参数信息必须都是已知的,且已经固化在主控程序的代码中才能被调用,如果用户想在主控程序中调用其自己开发的newTest()函数,就必须要修改主控程序,并重新编译其主控程序的执行程序,并发布新版本,这对于开发商来说是不现实的。
发明内容
本发明实施例提供了一种调用函数的方法及系统,使得可以根据用户的需求来控制是否调用动态库函数,并提高运行期的性能。
本发明实施例的技术方案包括:
一种调用函数的方法,配置函数调用计划并保存,该方法还包括以下步骤:
将函数动态库中所有的函数加载到函数资源池;
获得所述函数调用计划,根据所述调用计划从所述函数资源池中调用函数并执行。
一种调用函数的系统,包括:
函数动态库,用于存储所有待调用的函数;
配置单元,用于配置函数调用计划并保存;
第一加载单元,用于将函数动态库中的所有函数加载到函数资源池;
函数资源池,用于保存被加载的函数;
主控单元,用于调用所述函数调用计划,根据所述调用计划从所述函数资源池中调用函数并执行。
应用本发明实施例,由于调用计划是由用户配置的,因而可以根据用户的需求来控制是否调用动态库函数,以及如何调用等等,再有,由于启动时将函数动态库中的所有函数都加载到函数资源池,避免了运行期内调用函数时动态开启函数动态库的性能开销,因而提高了运行期的性能。
附图说明
图1是现有应用动态绑定的方式调用函数的流程示意图;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710086918.2/2.html,转载请声明来源钻瓜专利网。
- 上一篇:树体注射机
- 下一篇:螺帽置入治具及使用该治具的设备