动态链接和静态链接
2012-10-09 19:16
190 查看
理解静态链接和动态链接 前些日子在论坛上看到这样两个问题:
1、什么叫静态链接和动态链接?(static linking,dynamic linking)
2、如何理解先期和迟后联编?(early binding,later binding)
3、连接时所需的库lib和dll。
实际上,这两个问题性质是一样的,不管是静态链接/动态链接也好,还是先期联编/迟后联编也好,都是描述了何时确定应用程序所调用函数的入口地址,如果编译器在编译时或链接时确定了所有函数的入口地址,那么这种确定地址的方法称为静态链接或者先期联编。如果是在运行时确定所有函数的入口地址,那么这种确定地址的方法称为动态链接或者迟后联编。C++通过使用虚拟函数支持动态链接/迟后联编(也叫做动态联编),它们发生在运行时刻,这样一来,使用多重继承的程序便会有更大的灵活性。
下面我们用一段代码来加以说明:
当编译这段代码时,编译器在编译期间可以知道确切的函数信息,比如函数署名叫:“memberFunc”、“staticFunc”等----此即为静态链接/先期联编。但是在调用virtualFunc函数时,只能在运行时得知该函数的信息,此时函数才会被真正调用,因为代码可能是下面这样的: class B : public A { public //... virtual int virtualFunc(); } 并且如果 'pa' 被赋值 pa
= new B(); 那么类B的函数将会被调用并执行----此即为动态链接/迟后联编。
对于连接所需的库:
简单地讲:
第一:DLL是动态链接库,而.LIB是静态链接库
dll是个编译好的程序,调用时可以直接调用其中的函数,不参加工程的编译. 而lib应该说是一个程序集, 只是把一些相应的函数总结在一起, 如果调用lib中的函数,在工程编译时,这些调用的函数都将参加编译.
第二:从内存管理的角度来看,lib必须被链接到主程序中,主程序进入内存,lib也同时进入内存。而dll则是需要用到它的时候由操作系统调入内存。从复用性的角度来看,lib因为必须参加编译,所以复用性就不如DLL啦
1、什么叫静态链接和动态链接?(static linking,dynamic linking)
2、如何理解先期和迟后联编?(early binding,later binding)
3、连接时所需的库lib和dll。
实际上,这两个问题性质是一样的,不管是静态链接/动态链接也好,还是先期联编/迟后联编也好,都是描述了何时确定应用程序所调用函数的入口地址,如果编译器在编译时或链接时确定了所有函数的入口地址,那么这种确定地址的方法称为静态链接或者先期联编。如果是在运行时确定所有函数的入口地址,那么这种确定地址的方法称为动态链接或者迟后联编。C++通过使用虚拟函数支持动态链接/迟后联编(也叫做动态联编),它们发生在运行时刻,这样一来,使用多重继承的程序便会有更大的灵活性。
下面我们用一段代码来加以说明:
class A { public: A(); int memberFunc(); virtual int virtualFunc(); static int staticFunc()' } int main() { A* pa; // ... - initializing pa pa->memberFunc(); pa->vitrualFunt(); pa->staticFunc(); }
当编译这段代码时,编译器在编译期间可以知道确切的函数信息,比如函数署名叫:“memberFunc”、“staticFunc”等----此即为静态链接/先期联编。但是在调用virtualFunc函数时,只能在运行时得知该函数的信息,此时函数才会被真正调用,因为代码可能是下面这样的: class B : public A { public //... virtual int virtualFunc(); } 并且如果 'pa' 被赋值 pa
= new B(); 那么类B的函数将会被调用并执行----此即为动态链接/迟后联编。
对于连接所需的库:
简单地讲:
第一:DLL是动态链接库,而.LIB是静态链接库
dll是个编译好的程序,调用时可以直接调用其中的函数,不参加工程的编译. 而lib应该说是一个程序集, 只是把一些相应的函数总结在一起, 如果调用lib中的函数,在工程编译时,这些调用的函数都将参加编译.
第二:从内存管理的角度来看,lib必须被链接到主程序中,主程序进入内存,lib也同时进入内存。而dll则是需要用到它的时候由操作系统调入内存。从复用性的角度来看,lib因为必须参加编译,所以复用性就不如DLL啦
相关文章推荐
- 提高google排名之:将动态网页链接转换成静态链接
- 动态链接和静态链接
- linux下动态链接和静态链接
- 动态链接与静态链接
- 定制动态链接和静态链接
- 动态链接和静态链接的区别
- 静态链接与动态链接的区别
- 编译有哪些阶段,动态链接和静态链接的区别 c++
- CodeBlocks静态链接与动态链接设置
- ATL 静态链接 动态链接 出错处理
- C++函数动态链接库及静态链接
- 动态链接与静态链接的区别
- 关于动态链接与静态链接
- 动态链接和静态链接
- 静态编译/动态编译 静态链接/动态链接 静态库/动态库
- 动态链接与静态链接
- CodeBlocks静态链接与动态链接设置
- T264在静态链接和动态链接方式下的解码速度比较
- 如何创建和使用动态链接(dll)和静态链接(lib),全面总结
- 动态链接与静态链接对比