GCC由来

是由GNU组织编写,对抗商业收费的软件

GCC编译工具链

C语言整个编译过程可以分为四个阶段

  • 预处理阶段、编译阶段——GCC编译器
  • 汇编阶段、链接阶段——binutils工具链

运行helloWord

gcc helloword.c -o hello
  1. hello.c 的文件执行变为hello.i的文件(hello.c预处理之后的文件,头文件包含,条件编译、宏定义等)
  2. hello.i编译成hello.s的文件(hello.s是汇编文件。通过词法分析、语法分析就能编译成汇编文件了)
  3. hello.s 生成重定位文件hello.o
  4. hello.o文件链接成一个应用程序(hello应用程序)
  5. 在控制台通过./hello这个shell脚本就能执行这个程序了
    shell脚本怎么执行helloWord程序呢:
  6. shell创建一个进程fork()
  7. 运行execev(),可以理解成这是一个进程实体
  8. 然后在去调用sys_execve(),这是一个系统函数
  9. 继续调用load_elf_binary(),它会去文件系统里边加载hello应用程序到内存,准备去执行应用程序
  10. 执行应用程序需要链接一些库文件 ,静态链接和动态链接。
    - 静态链接:在编译阶段就会把所有用到的库全部打包到自己的一个可执行文件里,优点是移植性强,不需要依赖外部环境,但是生成的程序也会比较大
    - 动态链接:在编译阶段不会把所有库都打包到可执行程序里,在程序运行的时候通过动态连接器加载库文件,完成库文件和程序的链接、
  11. 链接完成之后找到程序入口_start
  12. 然后执行_libc_start_main()用来初始化一些应用程序的执行环境
  13. 然后才是改执行main()函数
  14. 打印helloWord
  15. 调用glibc库调用_exit()函数结束程序运行

helloWord执行过程相关推荐

  1. SQL执行过程中的性能负载点

    一.SQL执行过程 1.用户连接数据库,执行SQL语句: 2.先在内存进行内存读,找到了所需数据就直接交给用户工作空间: 3.内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到 ...

  2. python 二进制流转图片_Python零基础入门到精通-5.1节:Python程序的执行过程

    教程引言: 系统地讲解计算机基础知识,Python的基础知识, 高级知识,web开发框架,爬虫开发,数据结构与算法,nginx, 系统架构.一步步地帮助你从入门到就业. 5.1.1 在命令行中执行Py ...

  3. JSP的执行过程(详解)

    要了解JSP的执行过程,首要要搞懂什么是JSP,JSP的全称是Java Server Pages,里面包含html标签.css样式.JavaScript脚本和Java代码. 下面我们来说说JSP的执行 ...

  4. oracle 与 client端执行结果不一致_不同模式下Spark应用的执行过程

    根据应用执行的3个阶段,不同执行模式下各个阶段的执行逻辑不相同,本文分析不同模式下的执行逻辑. Yarn-Client模式的执行流程 Yarn的组成 Yarn是hadoop自带的资源管理框架,它的设计 ...

  5. Sql Server 因为触发器问题导致数据库更新报错“在触发器执行过程中引发了错误,批处理已中止”的问题处理...

    在维护一个非常旧的项目时,由于该项目版本已经非常老了,而且在客户现场运行的非常稳定,更要命的是本人目前没有找到该项目的代码,为了处理一个新的需求而且还不能修改程序代码,于是决定从数据库入手,毕竟该项目 ...

  6. saiku执行过程代码跟踪

    使用了很久的saiku,决定跟踪一下代码,看看它的执行核心过程: 一.入口controller代码 1.1.页面打开之后,会发送一个ajax请求 Request URL: http://l-tdata ...

  7. mysql查询解析过程_MySQL查询执行过程详解

    查询是用户通过设置某些查询条件,从表或其他查询中选取全部或者部分数据,以表的形式显示数据供用户浏览.查询是一个独立的.功能强大的.具有计算功能和条件检索功能的数据库对象.MySQL数据库中,MySQL ...

  8. servlet必知细节(二)--servlet执行过程

    servlet必知细节(二)--servlet执行过程 我们知道,servlet没有main函数,那么,servlet是怎么调用的呢? 实际上,servlet 是由tomcat调用的,tomcat调用 ...

  9. Hadoop学习之Mapreduce执行过程详解

    一.MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: ...

最新文章

  1. 繁凡的ACM算法全家桶(全新的模板整合计划)
  2. Nginx 解决WebApi跨域二次请求以及Vue单页面问题
  3. HTML中引入CSS的方法
  4. 计算机硬件Word,[计算机硬件及网络]word的操作.doc
  5. 手把手教你做产品经理,视频课教程已经发布,欢迎观看
  6. Python序列基本操作(二)
  7. 为什么说要注销 QQ 的,都是君子呢?
  8. 奇怪的等待事件“enq: ss - contention”
  9. Tip: Unicode Debug和Debug有什么区别?
  10. js-export-excel 前端将表格里的数据转excel下载到本地
  11. 腾讯企业邮箱开发(非官方开发文档方式
  12. 2011高教社杯全国大学生数学建模竞赛题目(MATLAB)
  13. C# 反射类Assembly用法举例
  14. vue3 使用富文本tinymce-vue
  15. IDM 下载器 使用记录
  16. 利用随机森林对特征重要性进行评估 方法一
  17. oracle闪回区满了,一次快速闪回区满导致数据库不能启动的解决过程
  18. python3 爬虫相关学习7:使用 BeautifulSoup下载网页图片到本地文件夹
  19. CSDN蒋涛对话阿里云CTO周靖人:大模型风起云涌,阿里云将毫无保留地开放各项能力...
  20. 【转】美国公司管理层的洗脑技巧

热门文章

  1. CEC设备连接和寻址
  2. css 平移到某个位置_CSS3平移动画效果
  3. linux usb 总线驱动程序,Linux下的USB总线驱动
  4. Windows发展历程
  5. ARouter 基础使用详解
  6. 查询校园网是否支持IPv6绕过校园网
  7. Android 线刷入Recovery.img
  8. 自定义控件三部曲之绘图篇(十八)——BitmapShader与望远镜效果
  9. java基于Springboot+vue的农产品销售商城网站 elementui
  10. python输出古诗词_使用LSTM训练生成古诗模型,其中生成器可以指定生成风格进行输出...