在我正在开发的嵌入式设备上,启动时间是一个重要问题。整个应用程序由多个使用一组库的可执行文件组成。由于闪存空间有限,我们希望使用共享库。
当编译并与共享库链接时,应用程序照常工作,并且闪存容量按预期减少。
与链接到静态库的版本的区别在于应用程序的启动时间长了大约 20 秒,我不知道为什么。
该应用程序在 180 MHz 的 ARM9 CPU 和 Linux 2.6.17 操作系统上运行,
16 MB 闪存(JFFS 文件系统)和 32 MB RAM。
因为共享库必须在运行时链接到,通常通过 dlopen() 或类似的东西。静态库没有这样的步骤。
编辑:更多细节。 dlopen 必须执行以下任务。
- 找到共享库
- 将其加载到内存中
- 递归加载所有依赖项(及其依赖项......)
- 解析所有符号
这需要相当多的IO操作才能完成。
在静态链接程序中,上述所有操作都是在编译时完成的,而不是运行时。因此加载静态链接程序要快得多。
就您而言,您的代码必须运行在相对较慢的硬件上,这种差异被夸大了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)