前言:我们常常在程序中看到编译,链接,执行,但是你真的了解过它们吗?作为一名未来的合格的程序员,应当能够对它们有清晰的认知。本文就将对它们进行浓缩精炼的介绍,让你面对它们的时候不再感到迷惑。
想要深入了解的话,推荐朋友们看一看《程序员的自我修养》这本书。

这里是目录

  • ==程序的翻译环境和执行环境==
    • ==翻译环境==
      • 预编译(预处理)
      • 编译
      • 汇编
      • 链接
    • ==执行环境==

程序的翻译环境和执行环境

在ANSI C的任何一种实现中,都存在着两个不同的环境

第一种是翻译环境,在这个环境中源代码被转换成可执行的机器指令
第二种是执行环境,它用于实际执行代码

而其中的翻译环境便是本章的重点内容,它还可以细分为好几个步骤。

翻译环境


上图是计算机程序设计语言的大致发展历程。而在翻译环境中,过程正与上图相反:

程序员输入易于理解的高级语言,转为汇编语言,再转为计算机能够识别的机器语言,这样不管对程序员,还是对计算机,都大大提高了工作效率,双方得利。

我们常常可以在文件中看到以.obj .exe结尾的文件,经过之前的学习,可能你会知道.obj就是目标文件,而.exe文件就是可执行文件,但是你知道它们是怎么产生的吗?请看下图翻译环境的细分图:


翻译环境分为编译链接两部分,而编译又可以细分为预编译(预处理) 编译 汇编三部分

预编译(预处理)

通过预编译,程序会产生一个.i文件,这个阶段完成了:1.头文件的包含 2.注释的删除 3.宏定义的转换等

编译

通过编译,生成一个.s文件,源代码被翻译成汇编代码 ,这个阶段完成了:1.语法分析 2.词法分析 3.语义分析 4.符号汇总

汇编

对汇编代码(.c)进行汇编操作生成一个目标文件(.obj),将汇编代码翻译成二进制的指令(目标文件中存储的是二进制的指令),在此阶段生成符号表

链接

1.合并段表
2.符号表的合并和重定位
经过上面两个步骤,生成可执行程序.exe
注:符号表的合并:每个.o文件都有符号表,将几个.0文件的符号表进行合并,进而生成一个新的符号表。

转载网图两张,方便理解:

总结:每个源文件都是单独编译的,最后各自生成一个.obj目标文件,多个目标文件通过链接器处理生成一个.exe可执行文件

执行环境

在这里执行环境不做过多的叙述

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

文末BB:对哪里有问题的朋友,可以在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能给点点赞和关注.

简单介绍程序的翻译环境和执行环境相关推荐

  1. 程序环境——翻译环境与执行环境

    本篇重点: 程序的翻译环境和执行环境 详解翻译环境中的 编译+链接 程序的翻译环境和执行环境 在ANSI的任何一种实现中,存在两个不同的环境. 翻译环境,在这个环境中源代码被转换为可执行的机器指令. ...

  2. C语言程序设计 | 程序环境和预处理:翻译环境和执行环境、宏、条件编译

    程序环境和预处理: 翻译环境和执行环境 宏 条件编译 翻译环境和执行环境 在ANSI C的任何一种实现中,存在两种不同的环境. 第一种是翻译环境,在这个环境中源代码被转换成可执行的机器指令.第二种是执 ...

  3. 转换环境与执行环境、宿主环境与独立环境、宿主实现与独立实现

    文章目录 1 转换环境与执行环境 1.1 转换环境与执行环境的概念 1.2 为什么要区分转换环境和执行环境 2 宿主环境和独立环境 2.1 宿主环境 2.2 独立环境 3 宿主实现.独立实现 3.1 ...

  4. java简单小程序加翻译_一个翻译小程序(带一点点抒情)

    博客园里有几篇关于父亲节的文章?什么狗屁的父亲节母亲节,为什么不去想想让父母天天像过节一样,为什么只有到了外国人的父亲节,母亲节才想起有个爸妈,除此在外boss比爹还亲呢. 很多人把时间都用在了自己的 ...

  5. 【C语言】程序的翻译环境和执行环境

  6. JavaScript执行环境 + 变量对象 + 作用域链 + 闭包

    闭包真的是一个谈烂掉的内容.说到闭包,自然就涉及到执行环境.变量对象以及作用域链.汤姆大叔翻译的<深入理解JavaScript系列>很好,帮我解决了一直以来似懂非懂的很多问题,包括闭包.下 ...

  7. Flink-DataStream执行环境和数据读取

    ​编辑执行环境 创建执行环境 执行模式 触发程序执行 源算子(Source) 读取有界数据流 读取无界数据 读取自定义数据源(源算子) DataStream是一个 Flink 程序,其实就是对 Dat ...

  8. 第一章 Matlab的简单介绍

    第一章 Matlab的简单介绍 Matlab的发展 Matlab的工作环境 Matlab的帮助系统 Matlab的窗口以及如何设置字体的大小 Matlab写语句 Matlab的执行方式 Matlab的 ...

  9. html代码在线运行环境,ES5/可执行代码与执行环境

    可执行代码类型 一共有三种 ECMA 脚本可执行代码: 全局代码是指被作为 ECMAScript Eval 代码是指提供给 eval 内置函数的源代码文本.更精确地说,如果传递给 eval 内置函数的 ...

最新文章

  1. 人脸检测库libfacedetection介绍
  2. js 正则判断字符串是否为字母或数字
  3. Python 命令行参数
  4. Java黑皮书课后题第3章:3.2(游戏:将三个数相加)程序清单3-1中的程序产生2个整数并提示用户输入这两个整数的和。修改该程序使之能产生三个个位数整数,提示用户输入这三个整数的和
  5. SQL Server 2005 COM+ 目录要求 (警告)
  6. C++实现简单的信息管理系统
  7. 深入理解ES6之迭代器与生成器
  8. 掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇
  9. 用任意合法序列建立一棵二叉树(洛谷P1305题题解,Java语言描述)
  10. html语言hr的用法,htmlhr各种样式使用 - 米扑博客
  11. Android ScrollView用法实例汇总
  12. 龙虎斗 详解(C++)
  13. deepstream imagedata multistream 中文注释数据流
  14. 使用VBSCRIPT安装字体
  15. ice中间件 java_ICE中间件介绍以及demo
  16. msgbox.html5.qq.com,怎样制作qq透明背景皮肤
  17. 解读随着教育改革的深入steam教育
  18. Layui 表单设计器
  19. linux 终端分屏工具 tmux
  20. 数据分析师,年终述职报告可以这么写(实操版)

热门文章

  1. 小程序的自定义组件报错:Some selectors are not allowed in component wxss, including tag name selectors, ID selec
  2. MySQL 亿级数据需求的优化思路(一),交易流水记录的查询
  3. C# 坦克游戏大战中学习相关类(Rectangle)
  4. tkinter-menu详解
  5. 军工软件测试面试准备
  6. 无处不在的二八原理[0]:什么是二八原理?
  7. Ubuntu 20.04入门操作(持续更新)
  8. SSM框架实验报告总结
  9. 解决ORA-01008: 并非所有变量都已绑定(详解问题所在)
  10. 每天一点数据库之-----Day 7 字段相关与联合结果集