VC++(十九)动态链接库

  • 静态库
    函数和数据被编译进一个二进制文件(.LIB)。在使用静态库下,在编译连接可执行文件时,链接器从库中复制这些函数和数据,并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE)。当产品发布时,只需要发布可执行文件,不需要发布使用的静态库。
    它的特点在于:
    1.编译后的可执行文件包含了所需要的函数的代码,占用磁盘空间较大。(但是可以避免出现用户的电脑上没有你开发时所用的库的尴尬情形。)
    2.如果多个调用相同库的进程在内存中同时运行,内存中会存放多份相同的代码。

  • 动态库在使用动态库的时候,往往提供两个文件:引入库(.lib)文件和DLL(.dll)文件。引入文件包含DLL导出的函数和变量的符号名,而.dll包含了该DLL的实际的函数和数据。再使用动态库的情况下,在编译连接可执行文件时,只需要连接该DLL的引入库文件,而该DLL的函数代码和数据并不复制到可执行文件中,知道可执行程序运行时,才加载所需的DLL,将该DLL映射到进程的地址空间中,然后访问DLL中导出的函数。此时,在发布产品时,除了发布可执行文件外,还要发布程序将要调用的动态链接库。使用动态库的好处在于能够节省磁盘空间和内存。如果多个应用程序需要访问同样的功能,那么可以将该功能以DLL的形式提供,这样一台机器上只需要存在一份该DLL就可以了,从而节省了磁盘空间。如果多个程序调用同一个DLL,该DLL的页面只需要存放在内存一次,所有的应用程序都可以共享它的页面了。

你可能感兴趣的:(VC++(十九)动态链接库)