C++小结-编译原理

来源:互联网 发布:金百福软件使用说明书 编辑:程序博客网 时间:2024/04/30 21:54
 看了一些关于C++的文章,暂且先记录一下自己的想法:
    C++编译原理(以VS为例):
        1、预编译(C++代码(有宏)---->C++代码(无宏)):编译器解析宏,将代码中存在宏的代码替换为宏定义的字符、C++的inline(内联)函数也是在此时替换的。
此时编译器是否已经分析出了cpp文件的信息,如cpp编译后的文件运行时需要的大小,cpp文件中每个函数的大小之类的信息呢?(问题0)


        2、编译(C++代码(无宏)------->汇编语言):编译器将C++代码解释为汇编语言,编译以一个cpp文件为单位,此时每个cpp文件包含(#include)的.h文件也会包含在其中,#ifndef#define的作用就是在此时(防止头文件的重复包含)。

在使用VS的时候,我们没有看到汇编语言的文件,但它的确是存在的,调出方法:
                   1)VS2005:

               项目 ---》属性 ---》 配置属性 ---》 c/c++ ---》 输出文件 ---》 右边内容项:汇编输出 ---》带源代码的程序集(/FAs )。

                这样在项目里面生成后缀为*.asm  的文件(汇编文件)。里面还有注释,有利于分析。 

但是.h文件的内容声明在汇编文件中是以什么形式存在呢?(汇编文件的结构是什么,问题1) 


 

        3、汇编(汇编语言------------------>机器码(.obj文件)):编译器调用自带的汇编工具将汇编语言翻译为机器码。
        此时编译器应该已经分析出现了未解决符号表,导出符号表和地址重定向表这三张表,但这三张表是如何被编译器分析出的呢?(分析过程?问题2)这三张表在.obj文件中以什么形式存在?(.obj的结构是什么,问题3)


        4、链接(.obj文件---------------------->exe文件/dll文件):C++的编译是已cpp文件为单位的,多少个cpp文件生成多少个对应的.obj文件,此时编译器负责为每个.obj文件分配其在exe文件中的位置(可能是预编译的时候分析出来的),然后根据.obj文件中的那三张表,为.obj文件之间互通有无,最后形成一个exe/dll文件。
0 0
原创粉丝点击