C语言——二周目——程序的翻译与执行环境

一、程序环境

        对于一个C语言程序的实现,整个过程一般存在两个不同的环境,分别是翻译环境与执行环境。在翻译环境中,我们所写的源代码经过一系列处理被转换成为可执行的机器指令;在执行环境中,会实际执行代码。

        整个程序在这两个环境中处理,由我们所写的.c文件最后变为.exe文件。

        该图便是程序在翻译与运行过程中的流程,每一个源文件通过编译转换为单独的一份目标代码,这些生成的目标文件最后由链接器捆绑在一起,链接器同时引入标准库与个人库内容,从而形成一个单一而完整的可执行程序。

        以下的内容,我们会一一介绍这些流程具体做了哪些事情。 

二、程序的翻译环境

1.编译

1.1预编译(预处理)

        在该过程中,源文件会从 .c文件 变为 .i文件 ,所进行的操作均为文本操作。具体的操作包括:

        ①注释的替换(删除)。在预编译阶段,代码中所写的注释信息会被用一个空格进行替换。

        ②头文件的包含。代码中通过#include所包含的头文件都会被引入,并且在此展开。

        ③#define 符号的替换。该阶段会将定义的常量、宏等进行替换。

1.2编译

        在该过程中,源文件会从 .i文件 变为 .s文件,将c语言代码翻译成为了汇编代码。具体的操作包括:

        ①词法分析;

        ②语法分析;

        ③语义分析;

        ④符号汇总。符号汇总的符号都是是针对全局的。

        在此处会生成语法树来构建整个语句,因其操作偏底层,所以挖个坑,等我们详细了解了编译原理之后再来把这个坑给填平。

1.3汇编

        在该过程中,源文件会从 .s文件 变为 .o文件,将汇编代码翻译成为了二进制的指令,即目标文件。

        在此时会生成符号表,所谓符号表即为编译时所汇总的符号的总和,其记录了符号名与指向的地址。以函数为例,对于在该源文件内声明并且定义的函数,会记录函数名与其地址;而对于只声明未定义的函数,会记录其函数名,地址则为一个随机指向的地址。

2.链接

        在链接的过程中,链接器会链接该项目下所有通过编译所生成的.o目标文件,同时链接链接库生成可执行程序。

        在该过程中会:①合并段表;②符号表的合并与重定义。具体则是将每一个目标文件中的符号表进行合并,相同的符号名会给予一个正确的地址,所以此时如果对于一个函数没有定义只有声明,便会报告链接错误。

三、程序的运行环境

        程序运行必须载入内存中,程序开始执行后调用main函数,然后执行代码直至终止程序。终止程序可能是main函数正常终止,也有可能是意外终止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/165476.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Open3D(C++) 最小二乘拟合平面(拉格朗日乘子法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 设拟合出的平面方程为: a x + b y + c

手写redux的connect方法, 使用了subscribe获取最新数据

一. 公共方法文件 1. connect文件 import React, { useState } from "react"; import MyContext from "./MyContext"; import _ from "lodash";// 模拟react-redux的 connect高阶函数 const connect (mapStateToProps, mapDispatchToProps) &…

数学建模——最优连接(基于最小支撑树)

一、概念 1、图的生成树 由图G(V,E)的生成子图G1(V,E1)(E1是E的子集)是一棵树,则称该树为图G的生成树(支撑树),简称G的树。图G有支撑树的充分必要条件为图G连通。 2、最小生成树问题 连通图G(V,E),每条边…

STM32串口

前言 提示:这里可以添加本文要记录的大概内容: 目前已经学习了GPIO的输入输出,但是没有完整的显示信息,最便宜的显示就是串口。 000 -111 AVR单片机 已经学会过了, 提示:以下是本篇文章正文内容&#x…

Servlet的生命周期

2023.10.18 WEB容器创建的Servlet对象,这些Servlet对象都会被放到一个集合当中(HashMap),这个集合当中存储了Servlet对象和请求路径之间的关系 。只有放到这个HashMap集合中的Servlet才能够被WEB容器管理,自己new的Ser…

《视觉 SLAM 十四讲》V2 第 10 讲 后端优化2 简化BA 【位姿图】

文章目录 第10讲 后端210.1 滑动窗口滤波 和 优化10.1.2 滑动窗口法 10.2 位姿图10.3 实践: 位姿图优化本讲 CMakeLists.txt 10.3.1 g2o 原生位姿图 【Code】10.3.2 李代数上的位姿优化 【Code】 习题10题1 【没推完】 LaTex 第10讲 后端2 滑动窗口优化 位姿图优化…

最新!两步 永久禁止谷歌浏览器 Google Chrome 自动更新

先放效果图: CSDN这个问题最火的大哥的用了没用 像他这样连浏览器都打不开 为什么要禁止chrome自动更新 看到很多搞笑的大哥,说为啥要禁止; 我觉得最大的原因就是chromedriver跟不上chrome的自动更新,导致我们做selenium爬虫的…

CentOS 7 安装 MySQL 8

一、卸载MariaDB MariaDB是MySQL 的一个分支,完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 1、查看版本(如果有就卸载) rpm -qa|grep mariadbrpm -e --nodeps 文件名 二、下载mysql 1、进入 /usr/…

中枢听觉处理障碍的行为干预方法

作者:听觉健康 在数十年前,中枢听觉处理障碍(CAPD)的研究已经引起了多学科的关注。1937年,Samuel Orton提出某些儿童的学习障碍与不能有效利用听觉有关。Myklebust是提出“中枢性听力障碍”引起儿童语言学习障碍的先驱者之一。二十世纪五十年…

C# Winform编程(7)文件处理技术

文件处理技术 System.IO命名空间System.IO命名空间常用的类System.IO命名空间常用的枚举 File类的常用方法FileInfo类的常用方法File类和FileInfo类的区别文件夹类Directory的常用方法 System.IO命名空间 System.IO命名空间常用的类 类说明File提供用于创建,复制&…

【数之道 08】走进“卷积神经网络“,了解图像识别背后的原理

卷积神经网络 CNN模型的架构Cnn 的流程第一步 提取图片特征提取特征的计算规则 第二步 最大池化第三步 扁平化处理第四步 数据条录入全连接隐藏层 b站视频 CNN模型的架构 图片由像素点组成,最终成像效果由背后像素的颜色数值所决定的 有这样的一个66的区域&#x…

YOLOv5改进实战 | 更换主干网络Backbone(三)之轻量化模型Shufflenetv2

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

2023年中国纸箱机械优点、市场规模及发展前景分析[图]

纸箱机械行业是指涉及纸箱生产和加工的机械设备制造、销售和相关服务的产业。这个行业的主要任务是设计、制造和提供用于生产各种类型和规格纸箱的机械设备,以满足包装行业对纸箱的不同需求。 纸箱机械行业优点 资料来源:共研产业咨询(共研网…

SpringBoot + MyBatis 在 jar 中可以启动但是 Idea中无法启动的原因

现象 在idea中启动始终卡住,查看线程堆栈发现一直在mybatis的处理过程中,细究了一下堆栈发现mybatis有使用远程方式加载类的情况,并且此时cpu会飙升, 在命令行中使用java -jar 的形式可以正常启动,但是在idea中启动始…

在 Visual Studio Code (VS Code) 中设置

在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下: 打开 Visual Studio Code。 在顶部菜单栏中,点击 "File"(文件) > "Preferences"(首选项) > "Settings…

解剖—单链表相关OJ练习题

目录 一、移除链表元素 二、找出链表的中间节点 三、合并两个有序链表 四、反转链表 五、求链表中倒数第k个结点 六、链表分割 七、链表的回文结构 八、判断链表是否相交 九、判断链表中是否有环(一) 十、 判断链表中是否有环(二) 注:第六题和第七题牛…

win11快速打开蓝牙设置的方法

win11快速打开蓝牙设置的方法 Windows 11 中快速连接蓝牙设备的 3 种方法!_哔哩哔哩_bilibili 如何为Windows设置快捷键?_百度知道 (baidu.com) Win11怎么隐藏文件夹?Win11通过命令隐藏文件夹的方法_windows11_Windows系列_操作系统_脚本之家 (jb51.net…

《动手学深度学习 Pytorch版》 9.5 机器翻译与数据集

机器翻译(machine translation)指的是将序列从一种语言自动翻译成另一种语言,基于神经网络的方法通常被称为神经机器翻译(neural machine translation)。 import os import torch from d2l import torch as d2l9.5.1 …

Kotlin(七) 接口

接口是用于实现多态编程的重要组成部分。我们都知道,Java是单继承结构的语言,任何一个类最多只能继承一个父类,但是却可以实现任意多个接口,Kotlin也是如此。 首先创建一个Study接口,在创建文件窗口选择“Interface…

面对DDoS和APT攻击,我们该如何有效防御?

关于DDoS(Distributed Denial of Service)分布式拒绝服务攻击,是指攻击者通过技术手段,在很短的时间内对目标攻击网站发出大量请求,极大地消耗相关网站的主机资源,导致其无法正常服务。 打个比方来说&#…