栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

程序的编译与执行环境

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

程序的编译与执行环境

文章目录

前言程序的环境编译环境

预处理编译汇编链接 执行环境

前言

本文简要概述程序的编译环境与执行环境的流程,其中编译环境中的预处理过程,重点放在了另外一边博客 : 预处理

博主的问题收集与自我解答:New Young

转载请标明出处:New Young

程序的环境

在ANSI C 的任何一种实现中:都有2种环境:

编译环境: 编译器将源代码(后缀.c文件中的代码)转换为包含机器语言(二进制代码)的目标代码文件,同时通过链接器 将 目标文件与 库文件,启动代码文件进行链接 生成 可执行的代码文件。这一过程又可细分为 预处理,编译,汇编,链接。

执行环境:执行可执行代码文件 。

编译环境 预处理

预处理进行的是文本操作,不进行任何相关计算。

库文件的包含

(.h)文件中是一些声明或者是自定义类型的声明等。一旦程序调用某些未声明函数,程序会creash。

宏的文本替换和预处理指令的操作等

去除程序注释内容

。。。

编译

分为2步:

分别将每个文件中的全局变量名和函数名进行汇总。

这也是,为什么在使用函数或者变量时,要进行 提前声明,或者定义式声明,或者引用式声明(extern)

通过 词法分析,语法分析,语义分析,分析代码的意思,将源代码转换为汇编语言。

汇编

将编译完成的汇编代码 转换为 机器可以识别的二进制代码,生成目标代码文件.

对每个符号和其地址 汇总到一个表中—符号表。

这样在程序遇到符号名,就可以通过地址,访问符号。

链接

对所有符号表进行合并和重定位。

因为不同的文件中的符号可能有重名的,这样就需要确定唯一的有效符号。

合并断表。

将启动代码,库代码(更多的是将程序用到库函数代码进行链接),目标代码文件,链接,生成可执行文件 (,exe)。

这也是为什么,在使用库函数 printf等,我们只需要在文件中 include 等库文件。

执行环境

程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。

程序的执行便开始。接着便调用main函数。

开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。

终止程序。正常终止main函数;也有可能是意外终止 .

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717265.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号