一种嵌入式系统开发平台图形库的性能优化设计方法

文档序号:6573504阅读:553来源:国知局
专利名称:一种嵌入式系统开发平台图形库的性能优化设计方法
技术领域
本发明涉及嵌入式系统,更具体的说,是涉及一种嵌入式系统开发平台图形库的性能优化设计方法。
背景技术
Qtopia是由Trolltech公司基于Qt/Embedded开发地第一个嵌入式地窗口环境和应用程序,有PDA和PHONE两种不同的版本。它被广泛用于PDA、手机、网络设施、掌上设备等。它包括全套的个人信息管理PIM(Personal InformationManagement),如地址本、电脑、日程安排、MPEG播放、图像显示、浏览器等,当然也还有Email、游戏、配置工具。
当前,QT在PC上的性能是非常好的。有了qvfb,Qtopia程序也可以在Intel XScale PXA 255上运行。在PC上,整个Qt/Qtopia任务栏的启动时间不到1秒,其中第一次启动是0.8秒,第二次启动是0.4秒。第二次时间要短于第一次是因为部分目标文件已经存在于内存中了。
但是Qtopia在Intel XScale PXA 255上的成绩就不是那么好了。在本次实验的板子上,整个Qtopia启动大约花了28秒。Qtopia启动时间是指Application::exec调用发生之前的时间。这是由于Qt/Embedded是用C++实现的,所以在几种成熟的GUI中系统资源消耗最大。所以有必要对它进行优化。
改进Qtopia图形函数库,提升热点函数的性能,增加缓存,都可以对Qtopia进行优化,但是,使用这些优化,基本都没有对Qtopia的底层函数进行任何修改,仅仅是使用外部工具,或者改变Qtopia的画图方法,这样没有充分发挥Qtopia的可定制性,也增加了这些优化方法的限制。

发明内容
为了克服现有技术中的不足,本发明提供了一种嵌入式系统开发平台图形库的性能优化设计方法。
为了解决技术问题,本发明是通过如下技术方案实现的。
一种嵌入式系统开发平台图形库的性能优化设计方法,包括以下步骤(1)分配内存和释放内存的重载①分配内存的重载在重载时,函数提供的行为要和系统缺省的分配内存操作一致,要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况;②释放内存的重载在出现要求释放的是空地址的情况情况,不做任何操作,直接将NULL返回。
(2)预链接Qtopia共享链接库为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;(3)减少可执行文件规模减少可执行文件规模,加快Qtopia图形库启动的速度,使用命令行命令目标文件的方法实现。
作为一种改进,所述的返回值包括如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个类型异常。
作为一种改进,所述的重载分配内存操作包括以下步骤(1)初始化操作定义一个新的指针,用来做开辟内存之后的指针;建立一个变量和分配内存对应的变量,判断变量的值如果这个值是0,那么设置这个值为1,防止分配空地址,如果不是,直接进入下一个阶段;(2)开辟内存用alloc函数分配内存,使用一个指针指向它;(3)判断异常如果分配不成功,汇报异常,调用系统的分配内存函数,如果分配成功,返回上一步建立的指针。
作为一种改进,所述的重载释放内存操作是使用函数来重载释放内存操作,如果释放内存的指针不为空,使用函数,如果为空,返回空。
与现有技术相比,本发明的有益效果是首先,效率高,通过去除两个函数的通用性,提高了分配和释放内存空间时候的性能;其次,更新了动态链接库,用预链接的方法链接所有的共享链接库,这样可以在不削弱程序扩展性的前提下,大幅度减少程序启动时花在重定位上的动态链接时间;最后,使用专用的命令,减少可执行文件的执行规模,提高效率。


图1是重载new函数的流程图。
图2是重载delete函数的流程图。
具体实施例方式
下面结合附图,通过具体实施例对本发明进行详细说明。
一种嵌入式系统开发平台图形库的性能优化设计方法,包括以下步骤(1)分配内存(new)和释放内存(delete)的重载为了重载new/delete操作,本发明修改了/qt-2.3.9/src/qobject.cpp、qobject.h和qsignal.cpp、qsignal.h四个文件中的部分代码。为了能重载的new/delete操作能为所有的Qtopia函数使用,本发明选择了在qobject.h和qobiect.cpp中重载new/delete操作。QObject类是所有Qt对象的基类,它被大多数的Qt库类所继承,提供了一些Qt最基本的功能如定时器、对象管理等。而作为QObject的成员函数的new/delete操作也会被子类继承,同时可以屏蔽作为全局声明的原new/delete操作。
①重载new操作首先,需要在qobject.h和qsignal.h中重载new操作的函数声明为void*operator new(size_tsize);在重载时,很重要的一点是函数提供的行为要和系统缺省的new操作一致,也就是要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况。
有关返回值的部分很简单。如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个std::bad_alloc类型的异常。但事情也不是那么简单。因为new操作实际上会不只一次地尝试着去分配内存,它要在每次失败后调用出错处理函数,还期望出错处理函数能想办法释放别处的内存,这将是一个循环的过程。这个循环只有在两种情况会跳出一、在指向出错处理函数的指针为空的情况下,调用系统new操作并跳出循环;二、内存分配成功并跳出循环。
new操作默认有六种重载形式,如下表所示。

本发明只重载了分配单块内存的第一种,原因首先,它是被调用最多的一个;其次,其余5种重载形式,包括其他一些自定义的重载形式都会在本身的函数体内部调用它。所以只要正确重载了void*operator new(std::size_t count),事实上就完成了其他new操作重载形式的重载工作。
根据以上分析,我就可以给出具体重载new操作算法如附图1。
②重载delete操作重载delete操作的函数声明为void operator delete(void*memoryToBeDeallocated);由于本发明使用malloc()重载了new操作,所以必须用free()来重载delete操作。混用new、free或者malloc、delete会带来难以估量的风险。delete操作与delete3操作符的关系和new操作与new操作符的关系一样。因此只能重载其中的delete操作。
与new操作类似,delete也需要考虑到如果要求释放的是空地址的情况。在出现这样情况,可以不做任何操作,直接将NULL返回。
根据以上分析,本发明就给出具体重载delete操作流程如附图2。
(2)预链接Qtopia共享链接库
在本次实验中使用编译器支持预链接,所以本文使用了编译器自带的prelink程序。本发明为distribution/lib和distribution/bin目录下所有的可执行文件预链接了共享链接库。并且由于PC及目标Intel XScale PXA 255采用的目录结构都是标准的Linux目录结构,所以prelink.conf文件中指明的共享链接库的位置并没有发生变化。所以,可以将PC上的prelink.conf文件中与Qt相关部分保留之后拷贝到PXA 255上,作为标准prelink查找路径文件。
预链接共享链接库的命令行是prelink-s目标文件。
(3)减少可执行文件规模在本发明中,编译器包含减少可执行文件规模的命令,可以使用编译器自带的arm-linux-strip程序,对distribution目录下所有的可执行文件都执行arm-linux-strip命令,就可以减少可执行文件的规模。
命令行内容是arm-linux-strip目标文件。
为了检验的新的画图函数的效果,使用修改过的QTopia图形函数库进行实验。我们使用的目标平台是Intel XScale的开发板,使用的操作系统是ARMLinux。本次实验所得的数据都是在这个平台上获得。
以下是我们的平台详细参数

首先分别进行优化,测试验数据。最后,综合起来做。根据实现步骤,我们首先进行重载new/delete的改动。之后我们编译,链接的时候采用预链接技术。最后,减少可执行文件的规模。
分别进行优化,然后把3种优化结合起来做,得到实验最终启动时间的对比,我们可以看到结果如下

我们可以看到,启动时间由显著下降,时间性能显著提升。
最后,还需要注意的是,以上列举的仅是本发明的一个具体实施例。显然,本发明不限于以上实施例,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
权利要求
1.一种嵌入式系统开发平台图形库的性能优化设计方法,其特征在于,包括以下步骤(1)分配内存和释放内存的重载①分配内存的重载在重载时,函数提供的行为要和系统缺省的分配内存操作一致,要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况;②释放内存的重载在出现要求释放的是空地址的情况情况,不做任何操作,直接将NULL返回;(2)预链接Qtopia共享链接库为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;(3)减少可执行文件规模减少可执行文件规模,加快Qtopia图形库启动的速度,使用命令行命令目标文件的方法实现。
2.根据权利要求1所述的一种嵌入式系统开发平台图形库的性能优化设计方法,其特征在于,所述的返回值包括如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个类型异常。
3.根据权利要求1所述的一种嵌入式系统开发平台图形库的性能优化设计方法,其特征在于,所述的重载分配内存操作包括以下步骤(1)初始化操作定义一个新的指针,用来做开辟内存之后的指针;建立一个变量和分配内存对应的变量,判断变量的值如果这个值是0,那么设置这个值为1,防止分配空地址,如果不是,直接进入下一个阶段;(2)开辟内存用alloc函数分配内存,使用一个指针指向它;(3)判断异常如果分配不成功,汇报异常,调用系统的分配内存函数,如果分配成功,返回上一步建立的指针。
4.根据权利要求1所述的一种嵌入式系统开发平台图形库的性能优化设计方法,其特征在于,所述的重载释放内存操作是使用函数来重载释放内存操作,如果释放内存的指针不为空,使用函数,如果为空,返回空。
全文摘要
本发明涉及嵌入式系统,旨在提供一种嵌入式系统开发平台图形库的性能优化设计方法。该方法包括以下步骤(1)重载分配内存/释放内存操作;(2)预链接Qtopia共享链接库为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;(3)减少可执行文件规模。该发明通过去除两个函数的通用性,提高了分配和释放内存空间时候的性能;更新了动态链接库,用预链接的方法链接所有的共享链接库,在不削弱程序扩展性的前提下,大幅度减少程序启动时花在重定位上的动态链接时间;使用专用的命令,减少可执行文件的执行规模,提高效率。
文档编号G06F9/44GK101013368SQ200710067160
公开日2007年8月8日 申请日期2007年2月2日 优先权日2007年2月2日
发明者陈天洲, 郑臻炜, 黄江伟, 曹明腾 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1