动态链接和静态链接的区别

纯自己理解 有任何不对欢迎改正

先提问题 静态链接和动态链接是什么?

我们用的stdio.h是动态库还是静态库?

为什么要有动态链接?

其实在很久之前没有动态链接 每个技术的提出都是为了解决一系列问题 

假如有2个文件同时引用了一个库 这个库是静态库 而静态库(c.o)里面在linux其实就是可重定位文件

a.c b.c 

静态链接就是吧这个库里面的全部文件都链接成为一个目标文件 然后再执行也就是

动态链接和静态链接的区别

为什么会这样分布呢首先静态链接是直接将c.o像拼拼图一样直接拼成一个整体 而动态链接则是共享的方式存到物理内存上就是 只有在物理内存上有就能运行

那么区别就是静态是直接将c.o直接拼成一个整体 而动态则不是是在运行的时候发现这个符号没有 那么我就把这个库放入进去

动态链接和静态链接的区别

可能大家会说不是还有lib文件吗那个是因为我得告诉他我要用符号 

动态链接和静态链接的区别

这样我编译并不会出错 但是我一旦运行就会出错了

动态链接和静态链接的区别

所以说这个是运行时候才会出问题编译和链接不会报错 所以动态库就可以说是运行时库 只有在运行的时候才会导入到一个特有的虚拟地址空间上特有的段上这个过程也叫装载

由于系统是页映射 这样如果有重复的完全可以不用转载到内存上 只需要加载一次就可以了 

参照 阿发你好  的视频