程序环境--翻译+执行

news2025/5/29 6:55:49

ANSI C标准下,有两种程序环境。

第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。

翻译环境包括:预处理(预编译)+编译+汇编+链接。四个步骤。
第2种是执行/运行环境,它用于实际执行代码。

链接库分为动态和静态链接库,库(Library)其实是库文件,库文件中是常用的函数或者类,#include<>包含的是库函数,二者不是完全相同的。

链接库,是将开源的库文件进行编译链接后得到的二进制文件,不能独立运行,必须等到其它程序调用,才会被载入内存。这里不详细讲述库的知识。

VS中,编译器--cl.exe      链接器--link.exe

 预处理只会处理#开头的语句,编译阶段只校验语法,链接时才会去找实体。

预处理:

相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有头文件(都已经被展开了)、宏定义(都已经替换了),没有条件编译指令(该屏蔽的都屏蔽掉了),没有特殊符号的输出文件,没有注释,这个文件的含义同原本的文件无异,只是内容上有所不同。(都是文本操作)

即非二进制指令。

生成.i文件。

编译:

将预处理完的文件逐一进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。编译是针对单个文件编译的,只校验本文件的语法是否有问题,不负责寻找实体。

符号汇总。

生成.s文件。

汇编:

把汇编指令变成二进制机器指令

形成符号表。符号+对应地址。(符号表为后续链接寻址做准备)

生成.o文件。elf格式,一个文件形成几个不同的段,使用readelf工具。   

链接:

通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。 链接程序的主要工作就是将有关的目标文件彼此相连接,也就是将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。在此过程中会发现被调用的函数未被定义。需要注意的是,链接阶段只会链接调用了的函数/全局变量,如果存在一个不存在实体的声明(函数声明、全局变量的外部声明),但没有被调用,依然是可以正常编译执行的。

1、合并段表   2、符号表的合并和重定位。3、寻址(通过符号表寻址)

对调用的进行寻址,重定位,只声明的可以正常编译,执行

链接寻址时若找不到某调用的函数,则之后也找不到了,就会发生错误。

生成.exe文件。

声明外部没有的符号,可以正常执行,没有警告或报错。 

参考书籍《程序员的自我修养》

 运行/执行环境

1. 程序必须载入内存中。在有操作系统的环境中:一般这个由操作系统完成。在独立的环境中,程序
的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。
2. 程序的执行便开始。接着便调用main函数。
3. 开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回
地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程
一直保留他们的值。
4. 终止程序。正常终止main函数;也有可能是意外终止

目录

预处理:

编译:

汇编:

链接:

 运行/执行环境


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UPC-2023新生个人训练赛第18场-Rank1

问题 B: 2的N次方 题目描述 输入n行&#xff0c;每行一个整数x&#xff0c;输出2的x次方的个位是多少&#xff1f;2的3次方表示3个2相乘&#xff0c;结果是8 输入 输入n行&#xff0c;每行一个整数x 输出 输出n行&#xff0c;每行一个整数&#xff0c;2的x次方的个位。 …

Flink CEP 在抖音电商的业务实践

摘要&#xff1a;本文整理自抖音电商实时数仓研发工程师张健&#xff0c;在 FFA 实时风控专场的分享。本篇内容主要分为四个部分&#xff1a;Flink CEP 简介业务场景与挑战解决方案实践未来展望Tips&#xff1a;点击「阅读原文」查看原文视频&演讲 ppt01Flink CEP 简介Flin…

论文投稿指南——中文核心期刊推荐(冶金工业 2)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

23种设计模式之策略模式

一、概念 就是将一系列算法封装起来&#xff0c;并使它们之间相互替换。被封装起来的算法具有独立性外部不可改变其特性。 策略模式属于对象行为模式&#xff0c;它通过对算法进行封装&#xff0c;把使用算法的责任和算法的实现分割开来&#xff0c;并委派给不同的对象对这些算…

BCN点击试剂diSulfo-Cy5-PEG3-BCN,二磺酸三聚乙二醇环丙烷环辛炔,纯度 95%+

【中文名称】二磺酸-三聚乙二醇-环丙烷环辛炔【英文名称】 diSulfo-Cy5-PEG3-BCN&#xff0c;BCN-PEG-Sulfo Cy5【CAS号】N/A【分子式】C51H68N4O12S2【分子量】993.24【基团】BCN基团【纯度】95%【规格标准】1g&#xff0c;5g&#xff0c;10g&#xff0c;包装灵活&#xff0c;…

2-ChatGPT插件到Google浏览器,并进行ChatGPT工作。

ChatGPT插件到Google浏览器&#xff0c;并进行ChatGPT工作。1&#xff0c;首先&#xff0c;在装插件ChatGPT forGoogle插件时&#xff0c;我没安装成功&#xff0c;问题是我没有区分Google浏览器和双核浏览器的差别。2&#xff0c;如何使用ChatGPT在浏览器上进行工作。1&#x…

[future 2022] 基于特征选择的DDoS攻击流分类方法

https://www.sciencedirect.com/science/article/pii/S0167739X22000474highlights•我们设计了一种特征选择方法来选择独立和相关的特征。•我们设计了一种方法来识别物联网和复杂的 DDoS 攻击流。•该体系结构在有效性和效率方面优于比较方法。摘要分布式拒绝服务 (DDoS) 攻击…

CentOS8基础篇3:使用vim编辑文档

一、vim编辑器 vim 编辑器共有三种工作模式&#xff0c;分别是命令模式、输入模式和末行模式。 〖例2.24〗使用vim编辑器创建并编辑文件hello.c。 二、查看文件内容命令 1. more/less 浏览文件全部内容 当文件内容过多时&#xff0c;可以用more或less命令来查看。 命令格式…

HTTP缓存看这一篇就够了

前言 HTTP缓存机制是优化web性能的重要手段&#xff0c;也是优化用户体验的重要一环。了解和熟悉HTTP缓存机制也成为了前端工作者必不可少的技能。 HTTP缓存是用于临时存储网页资源&#xff08;如HTML页面、图像等&#xff09;&#xff0c;以减少服务器延迟的一种技术。HTTP缓…

nim语言在不同操作系统安装

官网&#xff1a; Nim Programming Language 学习文档&#xff1a; Nim文档概述 Tutorial (part I)The Nim one deals with basics. 官方下载地址&#xff1a;Download - Nim Programming Language 目录 Mac OS Ubuntu centos Mac OS 安装语言 brew install nim 安装…

nodejs基于vue的饭店点餐外卖平台网站

本系统主要实现了管理员&#xff1a;首页、个人中心、用户管理、菜品分类管理、菜品信息管理、菜品评价管理、系统管理、订单管理,用户&#xff1a;首页、个人中心、菜品评价管理、我的收藏管理、订单管理,前台首页&#xff1a;首页、菜品信息、菜品资讯、个人中心、后台管理、…

尚医通(九)数据字典模块前后端 | EasyExcel

目录一、数据字典介绍1、什么是数据字典2、页面展示效果3、数据字典表设计4、数据分析5、根据页面效果分析数据接口二、搭建数据字典模块三、数据字典列表接口1、model模块添加数据字典实体2、添加数据字典mapper3、添加数据字典service4、添加数据字典controller四、数据字典列…

【百宝书】ChatGPT真的会成为MOSS吗?如果MOSS真的存在,地球和人类的结局会是怎么样的。

大家好&#xff0c;我是涵子&#xff0c;今天我们紧随潮流&#xff0c;聊聊ChatGPT会成为MOSS吗&#xff1f;如果MOSS真的存在&#xff0c;地球和人类的结局会是怎么样的。 本次借鉴内容&#xff1a; 程序yang - ChatGPT的火爆出圈&#xff0c;你对它有几分了解&#xff1f;_程…

【C++提高编程】map/ multimap 容器详解(附测试用例与结果图)

目录1. map/ multimap容器1.1 map基本概念1.2 map构造和赋值1.3 map大小和交换1.4 map插入和删除1.5 map查找和统计1.6 map容器排序1.7 案例-员工分组1.7.1 案例描述1.7.2 实现步骤1. map/ multimap容器 1.1 map基本概念 简介&#xff1a; map中所有元素都是pairpair中第一个…

“亚洲一号”也能上市?REITs背后的物流设施风起云涌

京东最近发生了两件大事&#xff0c;两件都与物流基础设施有关。 一件是2月8日&#xff0c;嘉实京东仓储物流封闭式基础设施证券投资基金&#xff08;简称“京东仓储REIT”&#xff09;正式登陆上交所&#xff0c;投资者获得了机会&#xff0c;去分享京东三处物流园区的收益&a…

数据治理专业认证CDMP学习笔记(思维导图与知识点)- 第五章数据建模与设计篇...

大家好&#xff0c;我是独孤风&#xff0c;一位曾经的港口煤炭工人&#xff0c;目前在某国企任大数据负责人&#xff0c;公众号大数据流动主理人。在最近的两年的时间里&#xff0c;因为公司的需求&#xff0c;还有大数据的发展趋势所在&#xff0c;我开始学习数据治理的相关知…

分布式新闻项目实战 - 9.后台系统管理

佳能&#xff1a;感动常在 记得很早之前看过的一个广告&#xff1a;男子拿着妻子的相机发呆&#xff0c;父亲尝试安慰着他&#xff0c;然后接过相机给他拍了张照片&#xff0c;突然他进去了相机的世界&#xff0c;相机里的他一直给父亲做手势&#xff0c;直到父亲翻到了最后一张…

MySQL数据库02——SQL基本语言组成和数据类型

接着上一章的内容&#xff0c;上一章安装好了Mysql和对应的编译器workbench&#xff0c;并且简单的创造了一个数据库college&#xff0c;这一章我们学习SQL语言的一些基础。 首先了解一下基础。 Sql语言组成 sql 的一些基本定义语句的的用法。 操作对象 语句 功能 表 CRE…

leetcode 困难 —— N 皇后(简单递归)

&#xff08;不知道为啥总是给这种简单的递归设为困难题&#xff0c;虽然优化部分很不错&#xff0c;但是题目太好过了&#xff09; 题目&#xff1a; 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个…

2023年信息与通信工程国际会议(JCICE 2023)

2023年信息与通信工程国际会议(JCICE 2023) 重要信息 会议网址&#xff1a;www.jcice.org 会议时间&#xff1a;2023年3月17-19日 召开地点&#xff1a;成都 截稿时间&#xff1a;2023年2月10日 录用通知&#xff1a;投稿后2周内 收录检索&#xff1a;EI,Scopus 会议简介…