C/C++编译原理

C/C++编译就是要将C/C++的代码映射到相应的机器码,以及讨论其中的内存管理模式,包括内存的分配,如何使用等等,整型、数组、指针等这些在内存中的实现机制。

C/C++的编译包括几个部分,分别是编译,汇编和链接。

1. 编译,就是将相应的高级语言代码映射到汇编语言,处理define,include等命令,加载外部的代码;

2. 汇编,就是将汇编语言映射到机器码;

3. 链接,形成相应的动态和静态链接库。动态连接库是在程序运行时动态的加载,静态连接库是直接拷贝进入程序,在程序执行时,这些静态连接库加载进来。 

静态链接库不同于动态链接库(*.dll),在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),Visual C++的编译器在链接过程中将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

备注:静态库在程序的发行时是不需要发布库的, 因为静态链接就是将程序所需的所有程序直接拷贝到程序中来。

在应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在连接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。为了克服这个缺点可以采用动态连接库。这个时候连接器仅仅是在可执行文件中打上标志,说明需要使用哪些动态连接库;当运行程序时,加载器根据这些标志把所需的动态连接库加载到内存

备注:动态库,肯定需要将程序的动态库一起发布,这样就可以减少程序的大小。

动态库(DLL),静态库(LIB)


你可能感兴趣的:(C/C++编程)