静态连接将需要的库文件直接链接进ELF中,假设多个ELF需要同一个库文件,如几乎所有的C代码都需要C库,那么C库会在多个ELF中存在完全一样的副本,对硬件资源是一种绝对浪费,尤其是在硬件资源比较受限的嵌入式系统中,不仅浪费flash,加载多个进程后,还浪费内存。
而动态连接能完美的解决以上问题,可以使依赖同一个库文件的各进程统一使用磁盘和内存中唯一的库文件。
而且多个进程共享一个库文件,不仅节省flash和内存,由于现代cpu都有cache用于提高访问速度,因为动态连接可以减少物理页面的换入和换出处理,所以可以增加CPU cache的命中率。
同时,程序的升级和发布更新也要更加容易,如果使用静态库,则必须发布链接静态库的ELF,如果作为动态库存在,则可以单独发布,跟主程序的耦合要减少很多,发布更新起来也要方便的多,试想,一个像matlib那样的程序,如果要更新一部分程序就要整个发布,7.8个G,估计大家开始down之后,可以直接睡觉了。
动态连接同样增强了程序的扩展和兼容性,对于开放平台或者软件意义尤其重大,发布的主平台只要定好相关接口,其他第三方开发者就可以开放功能特性各异的动态库。