什么是编译器,链接器,加载器?
我想深入了解编译器,链接器和加载器的意义和工作。
参考任何语言,最好是c ++。
没有找到相关结果
已邀请:
15 个回复
淑灯
C预处理器: - C预处理是编译的第一步。它处理:
陈述。
陈述。 有条件的陈述。 宏 该单元的目的是将C源文件转换为Pure C代码文件。 C编译: 该单元有六个步骤: 1)词法分析器: 它结合了源文件中的字符,形成“TOKEN”。一个 token是一组没有'space','tab'和'new line'的字符。 因此,这个编译单元也称为“TOKENIZER”。它也删除了 注释,生成符号表和重定位表条目。 2)句法分析器: 此单元检查代码中的语法。例如:
上面的代码将生成解析错误,因为方程式不是 均衡。本单元通过生成解析器树来内部检查 如下:
因此该单元也称为PARSER。 3)语义分析器: 本单元检查语句中的含义。例如:
上面的代码生成错误“不兼容类型的分配”。 4)预优化: 该单元独立于CPU,即有两种类型的优化 预优化(独立于CPU) 后优化(取决于CPU) 此单元以下列形式优化代码: I)消除死代码 II)子代码消除 III)循环优化 I)死代码消除: 例如:
这里,编译器在编译时知道'a'的值,因此它也是 知道if条件总是正确的。因此它消除了其他 代码中的一部分。 II)子代码消除: 例如:
可以如下优化:
III)循环优化: 例如:
在上面的代码中,如果'a'是本地的而不是在循环中使用,那么它可以是 优化如下:
5)代码生成: 在这里,编译器生成汇编代码以便更多 经常使用的变量存储在寄存器中。 6)后优化: 这里的优化与CPU有关。假设有多个 在代码中跳转然后将它们转换为一个:
控件直接跳转到。 然后最后一个阶段是链接(创建可执行文件或库)。 运行可执行文件时,它需要的库是Loaded。
诞胃
闯舱酮
然后,您创建一段代码并保存文件(源代码) 预处理: - 顾名思义,它不是编译的一部分。它们指示编译器在实际编译之前进行必要的预处理。您可以调用此阶段文本替换或解释由#表示的特殊预处理程序指令。 编译: - 编译是一种用一种语言编写的程序被翻译成另一种目标语言的过程。如果存在一些错误,编译器将检测它们并报告它。 汇编: - 汇编代码转换为机器代码。您可以将汇编程序称为特殊类型的编译器。 链接: - 如果这些代码需要链接其他一些源文件,链接器会链接它们以使其成为可执行文件。 之后会发生很多过程。是的,你猜对了装载机的作用: Loader: - 将可执行代码加载到内存中;创建程序和数据堆栈,初始化寄存器。 小额外信息: - http://www.geeksforgeeks.org/memory-layout-of-c-program/,你可以在那里看到内存布局。
河饶办斜施
骂狮淋唐便
香腔弥胯瓤
薄扩络拜
我们得到了可执行文件,现在将此文件提供给您的朋友或需要此软件的客户:) 当他们运行这个软件时,可以在命令行输入./a.out
程序加载到存储器后,通过使PC(程序计数器)指向
的第一条指令,控制转移到该程序。
骚瓤
扫窟
芯伶句餐绕
薄响
淘圃跺枯替
貉骂
陈獭
闪脖