| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言执行过程 -> 正文阅读 |
|
[C++知识库]C语言执行过程 |
本文中涉及的代码地址:analyseExecutionOfC 文件结构:
引言我们比较熟悉的C语言执行流程为:预处理、编译、汇编、链接、运行。但是各个阶段的具体流程又是什么呢?接下来针对每个阶段详细分析。 C语言的流行离不开gcc编译器的成功。gcc编译器帮助C程序完成四个阶段:预处理、编译、汇编、链接。然后将链接后的程序交给OS 执行。 本文简单介绍了C语言在执行之前的准备阶段,事实上每个阶段都是十分复杂的,绝对不是一篇或者几篇文章能够描述的,所以这里只能将描述停留在入门级上,希望能够对大家有所帮助。 GCC 编译过程源文件
预处理在 linux 中运行: 参数 预处理会丰富我们的源程序,调整删除多余的空格字符和制表符;将字符常数转化成对应的值;替换宏定义等。此时输出仍然是纯C代码。 编译在 linux 中运行: 参数 编译可以被通俗地理解为将一种格式的字符串转化为另一种格式的字符串。将这个概念带入 实际上C语言中函数的调用的确对应 X86汇编语言 的 接下来我将站在逻辑层面(means I won’t code a real compiler, But I will guide you to understand the compilation process ),结合C语言编译器的实现过程描述C语言的实现过程。
汇编在 linux 中运行: 参数 汇编结果展示:
区区(section)(也称为段、节或部分)用于表示一个地址范围,操作系统以相同的方式对待和处理在该地址范围内的数据信息。区的概念主要用来表示编译器生成的目标文件(或可执行文件)中不同的信息区域。 链接器会将输入的目标文件内容按照一定规律组合成一个可执行程序。 这里仅仅讲解其中的部分区域,有兴趣的小伙伴可以参考gcc官方文档查看每一个区的作用。 text区、data区:这两个区用以保存程序。当程序运行时,text区通常不会改变,text区中的内容会被进程共享,其中含有指令代码和常数等内容。程序在执行时data区的内容通常是变化的,例如,C语言的变量就存放在data区中。 bss区:该区用于存放未初始化的变量或作为公共变量储存空间。 因为 链接链接器会将输入的目标文件内容按照一定规律组合成一个可执行程序。 在 linux 中运行:
链接结果展示:
可执行文件也是文件,有自己的格式,但是不同操作系统定义了不同的可执行文件的格式。根据可执行文件操作系统就能够按顺序执行对应的汇编指令,我们也能得到程序的运行结果。 问题如果有什么问题可以在issue中发起提问。 另外稍后将会出一片文章,使用本文中的代码将程序的出栈入栈过程绘制出来。 参考文章
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 15:26:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |