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

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

Info

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
Application number
CNB2007100671608A
Other languages
English (en)
Other versions
CN101013368A (zh
Inventor
陈天洲
郑臻炜
黄江伟
曹明腾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CNB2007100671608A priority Critical patent/CN100492286C/zh
Publication of CN101013368A publication Critical patent/CN101013368A/zh
Application granted granted Critical
Publication of CN100492286C publication Critical patent/CN100492286C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (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图形库的性能优化设计方法,其特征在于,分配内存的重载这一步骤中,所述的返回值包括:如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个类型异常。
CNB2007100671608A 2007-02-02 2007-02-02 一种嵌入式系统开发平台图形库的性能优化设计方法 Expired - Fee Related CN100492286C (zh)

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)

* Cited by examiner, † Cited by third party
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
CN111563253B (zh) * 2020-07-16 2020-11-03 百度在线网络技术(北京)有限公司 智能合约运行方法、装置、设备及存储介质
CN111565204B (zh) * 2020-07-16 2021-06-18 百度在线网络技术(北京)有限公司 区块链运行方法、装置、设备及存储介质

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
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
US7941411B2 (en) Memory transaction grouping
CN101668283A (zh) 一种手机嵌入式系统中动态加载的方法
US7856637B1 (en) Runtime emulating static thread local storage of portable executable software code
RU2008122968A (ru) Оптимизация операций программной транзакционной памяти
CN100530108C (zh) 一种调用函数的方法及系统
JPH0836488A (ja) ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置
CN108829465B (zh) 一种基于直接读写flash的本地动态加载系统及方法
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) 程序变换方法
US9535687B2 (en) Audited builds based upon separate class dependency records
CN103365668A (zh) 一种动态链接库装载和链接的方法、装置
CN106201636A (zh) 一种dsp片外代码动态加载方法及装置
CN117193882A (zh) 一种基于微内核操作系统的elf加载方法
US20130275954A1 (en) Inter-procedural unreachable code elimination with use graph
CN110187884B (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