C++服务编译原理分析

为了更好地理解编译优化方案,在介绍优化方案之前,我们先简单介绍一下编译原理,通常我们在进行C++开发时,编译的过程主要包含下面四个步骤:

 

预处理器:宏定义替换,头文件展开,条件编译展开,删除注释。

  • gcc -E选项可以得到预处理后的结果,扩展名为.i 或 .ii。
  • C/C++预处理不做任何语法检查,不仅是因为它不具备语法检查功能,也因为预处理命令不属于C/C++语句(这也是定义宏时不要加分号的原因),语法检查是编译器要做的事情。
  • 预处理之后,得到的仅仅是真正的源代码。

编译器:生成汇编代码,得到汇编语言程序(把高级语言翻译为机器语言),该种语言程序中的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令。

  • gcc -S选项可以得到编译后的汇编代码文件,扩展名为.s。
  • 汇编语言为不同高级语言的不同编译器提供了通用的输出语言。

汇编器:生成目标文件。

  • gcc -c选项可以得到汇编后的结果文件,扩展名为.o。
  • .o文件,是按照的二进制编码方式生成的文件。

链接器:生成可执行文件或库文件。

  • 静态库:指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了,其后缀名一般为“.a”。
  • 动态库:在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可执行文件比较小,动态库一般后缀名为“.so”。
  • 可执行文件:将所有的二进制文件链接起来融合成一个可执行程序,不管这些文件是目标二进制文件还是库二进制文件。

参考文献

  • [1]《编译原理透视·图解编译原理》
  • [2] CCache
  • [3] 分布式编译
  • [4] C++ Templates

版权声明:本文为Jiangtagong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。