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

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

Info

Publication number
CN101013368A
CN101013368A CN 200710067160 CN200710067160A CN101013368A CN 101013368 A CN101013368 A CN 101013368A CN 200710067160 CN200710067160 CN 200710067160 CN 200710067160 A CN200710067160 A CN 200710067160A CN 101013368 A CN101013368 A CN 101013368A
Authority
CN
China
Prior art keywords
memory
library
link
qtopia
embedded system
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
Application number
CN 200710067160
Other languages
English (en)
Other versions
CN100492286C (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和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操作默认有六种重载形式,如下表所示。
分配单块内存 分配多块连续内存
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_t count,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_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。本次实验所得的数据都是在这个平台上获得。
以下是我们的平台详细参数:
PC Intel XScale
处理器 Pentium IV2.7  XScale PXA255
编译器 gcc 3.2.2  Arm-linux-gcc 3.3.2
内存 1G DDR  64MB SDRAM
QTE 2.3.9 free  2.3.9 free
Qtopia 2.1.1 free  2.1.1 free
首先分别进行优化,测试验数据。最后,综合起来做。根据实现步骤,我们首先进行重载new/delete的改动。之后我们编译,链接的时候采用预链接技术。最后,减少可执行文件的规模。
分别进行优化,然后把3种优化结合起来做,得到实验最终启动时间的对比,我们可以看到结果如下:
方法 优化前启动时间(秒) 优化后时间(秒)
重载new/delete 28  21
预链接 28  24
减少可执行文件规模 28  26
综合 28  16
我们可以看到,启动时间由显著下降,时间性能显著提升。
最后,还需要注意的是,以上列举的仅是本发明的一个具体实施例。显然,本发明不限于以上实施例,还可以有许多变形。本领域的普通技术人员能从本发明公开的内容直接导出或联想到的所有变形,均应认为是本发明的保护范围。

Claims (4)

1、一种嵌入式***开发平台图形库的性能优化设计方法,其特征在于,包括以下步骤:
(1)分配内存和释放内存的重载:
①分配内存的重载:在重载时,函数提供的行为要和***缺省的分配内存操作一致,要有正确的返回值;可用内存不够时要调用出错处理函数;处理好0字节内存请求的情况;
②释放内存的重载:在出现要求释放的是空地址的情况情况,不做任何操作,直接将NULL返回;
(2)预链接Qtopia共享链接库:为可执行文件预链接共享链接库,将个人电脑平台上的文件与Qtopia相关部分保留之后拷贝到嵌入式平台上,作为标准查找路径文件,之后采用目标文件的命令进行预链接;
(3)减少可执行文件规模:减少可执行文件规模,加快Qtopia图形库启动的速度,使用命令行命令目标文件的方法实现。
2、根据权利要求1所述的一种嵌入式***开发平台图形库的性能优化设计方法,其特征在于,所述的返回值包括:如果内存分配请求成功,就返回指向内存的指针;如果失败,则抛出一个类型异常。
3、根据权利要求1所述的一种嵌入式***开发平台图形库的性能优化设计方法,其特征在于,所述的重载分配内存操作包括以下步骤:
(1)初始化操作:定义一个新的指针,用来做开辟内存之后的指针;
建立一个变量和分配内存对应的变量,判断变量的值:如果这个值是0,那么设置这个值为1,防止分配空地址,如果不是,直接进入下一个阶段;
(2)开辟内存:用alloc函数分配内存,使用一个指针指向它;
(3)判断异常:如果分配不成功,汇报异常,调用***的分配内存函数,如果分配成功,返回上一步建立的指针。
4、根据权利要求1所述的一种嵌入式***开发平台图形库的性能优化设计方法,其特征在于,所述的重载释放内存操作是使用函数来重载释放内存操作,如果释放内存的指针不为空,使用函数,如果为空,返回空。
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 true CN101013368A (zh) 2007-08-08
CN100492286C 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)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102385509A (zh) * 2010-08-31 2012-03-21 苏州大学 一种图形化嵌入式开发方法和平台
CN102760218A (zh) * 2011-12-16 2012-10-31 哈尔滨安天科技股份有限公司 基于动态链接库的病毒特征库共享方法及装置
CN101702130B (zh) * 2009-11-12 2012-12-26 深圳市五巨科技有限公司 一种移动终端加载共享函数库的方法和装置
CN109857640A (zh) * 2018-12-28 2019-06-07 上海航天控制技术研究所 一种基于原型设计的嵌入式代码提前验证方法
CN111427550A (zh) * 2019-01-10 2020-07-17 武汉瓯越网视有限公司 一种对象创建方法、终端装置及存储介质
CN111506355A (zh) * 2019-01-14 2020-08-07 劳斯莱斯有限公司 优化方法
CN111563253A (zh) * 2020-07-16 2020-08-21 百度在线网络技术(北京)有限公司 智能合约运行方法、装置、设备及存储介质
CN111565204A (zh) * 2020-07-16 2020-08-21 百度在线网络技术(北京)有限公司 区块链运行方法、装置、设备及存储介质

Cited By (11)

* 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 哈尔滨安天科技股份有限公司 基于动态链接库的病毒特征库共享方法及装置
CN109857640A (zh) * 2018-12-28 2019-06-07 上海航天控制技术研究所 一种基于原型设计的嵌入式代码提前验证方法
CN109857640B (zh) * 2018-12-28 2022-05-24 上海航天控制技术研究所 一种基于原型设计的嵌入式代码提前验证方法
CN111427550A (zh) * 2019-01-10 2020-07-17 武汉瓯越网视有限公司 一种对象创建方法、终端装置及存储介质
CN111506355A (zh) * 2019-01-14 2020-08-07 劳斯莱斯有限公司 优化方法
CN111506355B (zh) * 2019-01-14 2023-11-17 劳斯莱斯有限公司 优化可重新配置的电力***的性能的方法
CN111563253A (zh) * 2020-07-16 2020-08-21 百度在线网络技术(北京)有限公司 智能合约运行方法、装置、设备及存储介质
CN111565204A (zh) * 2020-07-16 2020-08-21 百度在线网络技术(北京)有限公司 区块链运行方法、装置、设备及存储介质
CN111565204B (zh) * 2020-07-16 2021-06-18 百度在线网络技术(北京)有限公司 区块链运行方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN100492286C (zh) 2009-05-27

Similar Documents

Publication Publication Date Title
CN100492286C (zh) 一种嵌入式***开发平台图形库的性能优化设计方法
EP2487585B1 (en) Method and device for dynamically loading relocatable file
CN106156278B (zh) 一种数据库数据读写方法和装置
US6304867B1 (en) System and method for enhanced performance of a relational database management system through the use of application-specific memory-resident data
US20110161945A1 (en) Minimizing Register Spills by Using Register Moves
CN101187899B (zh) 嵌入式***存储空间的优化方法
CN101668283A (zh) 一种手机嵌入式***中动态加载的方法
US7856637B1 (en) Runtime emulating static thread local storage of portable executable software code
CN100530108C (zh) 一种调用函数的方法及***
RU2008122968A (ru) Оптимизация операций программной транзакционной памяти
CN108829465B (zh) 一种基于直接读写flash的本地动态加载***及方法
CN1813243B (zh) 在受控运行时使软件应用去同步的装置和方法
CN101763273B (zh) 一种在嵌入式***的扩展存储器中动态装入代码的方法
US7028293B2 (en) Constant return optimization transforming indirect calls to data fetches
CN100533382C (zh) 程序变换方法
US8799629B2 (en) Parallel execution of a loop
US9535687B2 (en) Audited builds based upon separate class dependency records
CN106201636A (zh) 一种dsp片外代码动态加载方法及装置
CN117193882A (zh) 一种基于微内核操作***的elf加载方法
US6219825B1 (en) Profile based optimization of shared libraries
CN105446789A (zh) 一种内置应用程序到安卓***的方法及装置
Marinelli et al. XJoin: Portable, parallel hash join across diverse XPU architectures with oneAPI
CN110187884B (zh) 一种多线程应用场景下的访存指令插桩优化方法
Dollinger et al. Adaptive runtime selection for GPU
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