linux编程,库分为动静态两种。简单理解下动态库
1 可执行目标文件如果在链接阶段调用了动态链接库,此时并不会有动态库的代码加入到可执行目标文件里,只是会有相关的一些动态库的符号信息加入这个可执行目标文件。
2 那动态库的代码什么时间被调用?
答案是在程序加载的时候,此时动态连接器会根据步骤1的符号表等信息,把动态库里相关代码和数据映射到进程的0x40000000开始的区域。
3 此时虚拟存储器中就有了进程的映像了,但代码并没有从磁盘上拷贝到内存中。换句话说,操作系统的加载器没有“彻底”完成把程序从磁盘加载到内存的过程,那是什么时候由谁来完成的?
答案是虚拟存储器的缺页访问机制。
动态库比静态库的好处:
1 节约了空间。库里面内容在内存里只有一份拷贝,所有应用程序共享。静态库是要自己编译自己的。
2 库升级方便。程序在加载运行的时候才会真正和库打交道,省去了静态库重新编译的麻烦。
参考:《深入理解计算机系统》中文版 第七章 链接
阅读(1366) | 评论(5) | 转发(0) |