CN100492286C - 一种嵌入式系统开发平台图形库的性能优化设计方法 - Google Patents
一种嵌入式系统开发平台图形库的性能优化设计方法 Download PDFInfo
- Publication number
- CN100492286C CN100492286C CNB2007100671608A CN200710067160A CN100492286C CN 100492286 C CN100492286 C CN 100492286C CN B2007100671608 A CNB2007100671608 A CN B2007100671608A CN 200710067160 A CN200710067160 A CN 200710067160A CN 100492286 C CN100492286 C CN 100492286C
- Authority
- CN
- China
- Prior art keywords
- qtopia
- link
- memory
- heavy duty
- platform
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 20
- 238000005457 optimization Methods 0.000 title claims abstract description 11
- 230000033772 system development Effects 0.000 title abstract description 7
- 230000006870 function Effects 0.000 claims abstract description 28
- 238000012545 processing Methods 0.000 claims description 6
- 230000006399 behavior Effects 0.000 claims description 3
- 238000011161 development Methods 0.000 claims description 3
- 239000011800 void material Substances 0.000 description 12
- 230000008569 process Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000002474 experimental method Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000035800 maturation Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及嵌入式系统,旨在提供一种嵌入式系统开发平台图形库的性能优化设计方法。该方法包括以下步骤:(1)重载分配内存/释放内存操作;(2)预链接Qtopia共享链接库:为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;(3)减少可执行文件规模。该发明通过去除两个函数的通用性,提高了分配和释放内存空间时候的性能;更新了动态链接库,用预链接的方法链接所有的共享链接库,在不削弱程序扩展性的前提下,大幅度减少程序启动时花在重定位上的动态链接时间;使用专用的命令,减少可执行文件的执行规模,提高效率。
Description
技术领域
本发明涉及嵌入式系统,更具体的说,是涉及一种嵌入式系统开发平台图形库的性能优化设计方法。
背景技术
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和qobject.cpp中重载new/delete操作。QObject类是所有Qt对象的基类,它被大多数的Qt库类所继承,提供了一些Qt最基本的功能如定时器、对象管理等。而作为QObject的成员函数的new/delete操作也会被子类继承,同时可以屏蔽作为全局声明的原new/delete操作。
①重载new操作:
首先,需要在qobject.h和qsignal.h中重载new操作的函数声明为:
void *operator new(size_t size);
在重载时,很重要的一点是函数提供的行为要和系统缺省的new操作一致,也就是:要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况。
有关返回值的部分很简单。如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个std::bad_alloc类型的异常。但事情也不是那么简单。因为new操作实际上会不只一次地尝试着去分配内存,它要在每次失败后调用出错处理函数,还期望出错处理函数能想办法释放别处的内存,这将是一个循环的过程。这个循环只有在两种情况会跳出:一、在指向出错处理函数的指针为空的情况下,调用系统new操作并跳出循环;二、内存分配成功并跳出循环。
new操作默认有六种重载形式,如下表所示。
分配单块内存 | 分配多块连续内存 |
void *operator new(std::size_t count) | void *operator new[](std::size_t count) |
void *operator new(std::size_t count,const std::nothrow_t&) | void *operator new[](std::size_tcount,const std::nothrow_t&) |
void *operator new(std::size_t count,void *ptr) | void *operator new[](std::size_t count,void *ptr) |
本发明只重载了分配单块内存的第一种,原因:首先,它是被调用最多的一个;其次,其余5种重载形式,包括其他一些自定义的重载形式都会在本身的函数体内部调用它。所以只要正确重载了void *operator new(std::size_tcount),事实上就完成了其他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 PXA255采用的目录结构都是标准的Linux目录结构,所以prelink.conf文件中指明的共享链接库的位置并没有发生变化。所以,可以将PC上的prelink.conf文件中与Qt相关部分保留之后拷贝到PXA255上,作为标准prelink查找路径文件。
预链接共享链接库的命令行是:prelink-s目标文件。
(3)减少可执行文件规模:
在本发明中,编译器包含减少可执行文件规模的命令,可以使用编译器自带的arm-linux-strip程序,对distribution目录下所有的可执行文件都执行arm-linux-strip命令,就可以减少可执行文件的规模。
命令行内容是:arm-linux-strip目标文件。
为了检验的新的画图函数的效果,使用修改过的QTopia图形函数库进行实验。我们使用的目标平台是Intel XScale的开发板,使用的操作系统是ARMLinux。本次实验所得的数据都是在这个平台上获得。
以下是我们的平台详细参数:
PC | Intel XScale | |
处理器 | Pentium IV2.7 | XScale PXA255 |
编译器 | gcc3.2.2 | Arm-linux-gcc 3.3.2 |
内存 | 1G DDR | 64MB SDRAM |
QTE | 2.3.9free | 2.3.9free |
Qtopia | 2.1.1free | 2.1.1free |
首先分别进行优化,测试验数据。最后,综合起来做。根据实现步骤,我们首先进行重载new/delete的改动。之后我们编译,链接的时候采用预链接技术。最后,减少可执行文件的规模。
分别进行优化,然后把3种优化结合起来做,得到实验最终启动时间的对比,我们可以看到结果如下:
方法 | 优化前启动时间(秒) | 优化后时间(秒) |
重载new/delete | 28 | 21 |
预链接 | 28 | 24 |
减少可执行文件规模 | 28 | 26 |
综合 | 28 | 16 |
我们可以看到,启动时间由显著下降,时间性能显著提升。
最后,还需要注意的是,以上列举的仅是本发明的一个具体实施例。显然,本发明不限于以上实施例,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。
Claims (2)
1、一种嵌入式开发平台Qtopia图形库的性能优化设计方法,其特征在于,包括以下步骤:
(1)在qobject.h和qobject.cpp两个文件中进行分配内存和释放内存的重载:
①分配内存的重载:在重载时,函数提供的行为要和系统缺省的分配内存操作一致,要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况;
②释放内存的重载:在出现要求释放的是空地址的情况时,不做任何操作,直接将NULL返回;
(2)预链接Qtopia共享链接库:为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;
(3)减少可执行文件规模:使用编译器自带的arm-linux-strip命令减少可执行文件规模,加快Qtopia图形库启动的速度,使用命令行命令目标文件的方法实现。
2、根据权利要求1所述的嵌入式开发平台Qtopia图形库的性能优化设计方法,其特征在于,分配内存的重载这一步骤中,所述的返回值包括:如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个类型异常。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100671608A CN100492286C (zh) | 2007-02-02 | 2007-02-02 | 一种嵌入式系统开发平台图形库的性能优化设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100671608A CN100492286C (zh) | 2007-02-02 | 2007-02-02 | 一种嵌入式系统开发平台图形库的性能优化设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101013368A CN101013368A (zh) | 2007-08-08 |
CN100492286C true CN100492286C (zh) | 2009-05-27 |
Family
ID=38700904
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100671608A Expired - Fee Related CN100492286C (zh) | 2007-02-02 | 2007-02-02 | 一种嵌入式系统开发平台图形库的性能优化设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100492286C (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702130B (zh) * | 2009-11-12 | 2012-12-26 | 深圳市五巨科技有限公司 | 一种移动终端加载共享函数库的方法和装置 |
CN102385509A (zh) * | 2010-08-31 | 2012-03-21 | 苏州大学 | 一种图形化嵌入式开发方法和平台 |
CN102760218A (zh) * | 2011-12-16 | 2012-10-31 | 哈尔滨安天科技股份有限公司 | 基于动态链接库的病毒特征库共享方法及装置 |
CN109857640B (zh) * | 2018-12-28 | 2022-05-24 | 上海航天控制技术研究所 | 一种基于原型设计的嵌入式代码提前验证方法 |
CN111427550A (zh) * | 2019-01-10 | 2020-07-17 | 武汉瓯越网视有限公司 | 一种对象创建方法、终端装置及存储介质 |
GB201900477D0 (en) * | 2019-01-14 | 2019-02-27 | Rolls Royce Plc | Optimisation method |
CN111565204B (zh) * | 2020-07-16 | 2021-06-18 | 百度在线网络技术(北京)有限公司 | 区块链运行方法、装置、设备及存储介质 |
CN111563253B (zh) * | 2020-07-16 | 2020-11-03 | 百度在线网络技术(北京)有限公司 | 智能合约运行方法、装置、设备及存储介质 |
-
2007
- 2007-02-02 CN CNB2007100671608A patent/CN100492286C/zh not_active Expired - Fee Related
Non-Patent Citations (5)
Title |
---|
Local Memory Exploration and Optimization in EmbeddedSystems. Preeti Ranjan Panda, Nikil D.Dutt, Alexandru Nicolau.IEEE Transactions on computer-aided design of integrated circuits and systems,Vol.18 No.1. 1999 |
Local Memory Exploration and Optimization in EmbeddedSystems. Preeti Ranjan Panda, Nikil D.Dutt, Alexandru Nicolau.IEEE Transactions on computer-aided design of integrated circuits and systems,Vol.18 No.1. 1999 * |
基于Microwindows的嵌入式Linux轻量级图形应用库的设计. 胡双红,邓月明.电脑与信息技术,第14卷第2期. 2006 |
基于Microwindows的嵌入式Linux轻量级图形应用库的设计. 胡双红,邓月明.电脑与信息技术,第14卷第2期. 2006 * |
嵌入式Linux系统中GUI系统的研究与移植. 徐广毅,张晓林,崔迎炜,杨欣昕,吴小伟.单片机与嵌入式系统应用. 2004 |
Also Published As
Publication number | Publication date |
---|---|
CN101013368A (zh) | 2007-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100492286C (zh) | 一种嵌入式系统开发平台图形库的性能优化设计方法 | |
US6304867B1 (en) | System and method for enhanced performance of a relational database management system through the use of application-specific memory-resident data | |
CN106156278B (zh) | 一种数据库数据读写方法和装置 | |
EP2487585B1 (en) | Method and device for dynamically loading relocatable file | |
US7856637B1 (en) | Runtime emulating static thread local storage of portable executable software code | |
CN101668283A (zh) | 一种手机嵌入式系统中动态加载的方法 | |
CN100530108C (zh) | 一种调用函数的方法及系统 | |
JPH0836488A (ja) | ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置 | |
CN108829465B (zh) | 一种基于直接读写flash的本地动态加载系统及方法 | |
CN1813243B (zh) | 在受控运行时使软件应用去同步的装置和方法 | |
CN102289380B (zh) | firefox启动加速方法 | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
CN111124550A (zh) | 一种程序动态加载方法、装置及存储介质 | |
CN101763273B (zh) | 一种在嵌入式系统的扩展存储器中动态装入代码的方法 | |
US7028293B2 (en) | Constant return optimization transforming indirect calls to data fetches | |
KR101059633B1 (ko) | 멀티태스킹 가상 머신을 위한 힙 구성 | |
CN100533382C (zh) | 程序变换方法 | |
US20060070053A1 (en) | Dynamic linking of modules in a pre-operating system environment | |
CN103365668A (zh) | 一种动态链接库装载和链接的方法、装置 | |
CN106201636A (zh) | 一种dsp片外代码动态加载方法及装置 | |
CN117193882A (zh) | 一种基于微内核操作系统的elf加载方法 | |
US20130275954A1 (en) | Inter-procedural unreachable code elimination with use graph | |
CN110187884B (zh) | 一种多线程应用场景下的访存指令插桩优化方法 | |
CN101013369A (zh) | 一种嵌入式系统开发平台图形库的优化作图方法 | |
CN109240702A (zh) | 一种多线程模式下的快速段式编址配置和访问方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090527 Termination date: 20120202 |