Chinaunix首页 | 论坛 | 博客
  • 博客访问: 522426
  • 博文数量: 237
  • 博客积分: 2175
  • 博客等级: 大尉
  • 技术积分: 2563
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-05 22:02
个人简介

目前在一家公司担任软件总监,主要涉及智能手机,笔记本电脑的开发

文章分类

全部博文(237)

文章存档

2024年(18)

2023年(68)

2022年(13)

2021年(7)

2020年(11)

2019年(3)

2018年(10)

2017年(8)

2012年(7)

2011年(4)

2010年(32)

2009年(41)

2008年(6)

2007年(9)

分类: LINUX

2009-10-27 00:42:59

每个应用程序启动的时候都要经历下列阶段:
1)Load and Link 动态连接库
2)构建 QtopiaApplication
3) 构建 widgets
4) load 数据文件
这使得应用程序的启动变得很慢 。

方法1 :singleexec
  其原理和busybox类似,缺省的时候qtopia编译成动态库,通过-singleexec参数的configure中,将
所有的应用程序静态链接成一个可执行文件qpe,每个应用可执行文件都是指向qpe的链接文件。
  好处:
  • he single-exec binary is smaller than the combined sizes of the dynamic binaries.
  • The memory footprint is reduced due to the static linking.
  • All dynamic linking costs are removed due to the static linking. This can speed up Qt Extended startup time, app startup time and plugin load time.
  坏处:
 
  • Cannot install new applications except by rebuilding Qt Extended.
  • The single-exec binary is too large put on a cramfs filesystem
  这种方法很少采用,因为多个应用程序分开有利于调试。

方法2 :quicklauncher
  quicklauncher机制是省去1),2),3)的启动时间,一个stub应用(quicklauncher)将预先运行,然后它做完1),2),3),然后等待一个请求去run一个应用程序。
  当quicklauncher收到请求时,它将加载Application 插件,然后run应用程序的初始化函数(它将创建
main widget)

上述2种方法的组合:
Singleexec build? quicklaunch singleexec result
no no no regular application
no yes no quicklaunch application
yes no no regular application (avoid using Qt and other Qtopia libs as they will be statically linked)
yes no yes singleexec application (main function mechanism)
yes yes yes singleexec application (quicklaunch mechanism)


 
 

方法3 :Delaying code execution.
   其原理就是把那些在启动的时候不用的widget,数据文件不加载,要用的时候才去创建他们。
例如:
MainWidget::MainWidget( QWidget *parent, Qt::WFlags f )
        : QMainWindow( parent, f ), settingsDialog(0)
    {
    }

    void MainWidget::showSettings()
    { // If settingsDialog has not yet been created, create it now. if ( !settingsDialog )
            settingsDialog = new SettingsDialog( this );
        settingsDialog->exec();
    }


方法4 : prelink 
  参见,
  这个方法提高了整个系统的启动时间,
Prelink工具的原理主要基于这样一个事实:动态链接和加载的过程开销很大,并且在大多数的系统上, 函数库并不会常常被更动, 每次程序被执行时所进行的链接动作都是完全相同的,对于嵌入式系统来说尤其如此。因此,这一过程可以改在运行时之前就可以预先处理好,即花一些时间利用 Prelink工具对动态共享库和可执行文件进行处理,修改这些二进制文件并加入相应的重定位等信息,节约了本来在程序启动时的比较耗时的查询函数地址等 工作,这样可以减少程序启动的时间,同时也减少了内存的耗用。 

         Prelink的这种做法当然也有代价:我们每次更新动态共享库时,相关的可执行文件都需要重新执行一遍Prelink才能保证有效,因为新的共享库中的 符号信息、地址等很可能与原来的已经不同了。这种代价对于嵌入式系统的开发者来说可能稍微带来一些复杂度,不过好在对用户来说几乎是可以忽略的。







阅读(696) | 评论(0) | 转发(0) |
0

上一篇:Qt/Qtopia 的进程间通讯

下一篇:qtopia的裁减

给主人留下些什么吧!~~