程序编译过程

作者: Creator_Ly | 来源:发表于2019-01-06 22:37 被阅读4次

程序编译过程

程序编译流程

预处理主要是处理以“#”号开头的命令,包括宏定义、文件包含、条件编译。

编译的时候会检测语法、函数、变量的声明等情况,有错误则立即报错;经过编译器将c程序编译成汇编程序后,再经过汇编器将会汇编程序编译成.o文件。

链接器就是将.o文件与外部的.a库、.lds链接脚本等文件进行编译生成可执行文件.elf、.out。

可执行文件一般还需要转换工具(objcopy)转换成二进制文件.bin、.hex等

可执行程序对数据的存储包括BSS段、数据段、代码段,这些段在.lds链接脚本里面会定义。

  • BSS段:存放未初始化的全局变量和静态变量,默认这些值都为0,可读写;
  • 数据段:存放已初始化的全局变量和静态变量,可读写;
  • 代码段:存放可执行代码的位置,一般为只读。

堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc/free等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张)/释放的内存从堆中被剔除(堆被缩减)

栈(stack):栈又称堆栈, 存放程序的局部变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,栈用来传递参数和返回值。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。

memory

相关文章

  • 程序编译过程

    程序编译过程 预处理主要是处理以“#”号开头的命令,包括宏定义、文件包含、条件编译。 编译的时候会检测语法、函数、...

  • 程序编译过程

    本文编译的文件cpu架构为X86_64。 编译型语言编译过程主要有预编译、编译、汇编、链接。 预编译This st...

  • java编译过程

    1、java编译过程与c/c++编译过程不同java编译程序将java源程序编译成jvm可执行代码--java字节...

  • 编译原理(部分)

    第1章 引论 1.1 什么是编译程序 功能:高级语言程序(源程序)→【编译程序】→低级语言程序(目标程序) 过程:...

  • 编译原理

    一、编译过程编译程序完成从源程序到目标程序的翻译工作,是一个复杂的过程。而在大半个学期的学习下,我发现必须熟记编译...

  • C程序编译过程

    1.概述 通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out。但实际...

  • 程序编译的过程

    源文件――目标文件――可执行文件 源文件到目标文件就是所谓的将高级语言转变成计算机能够读懂的二进制文件,也就是机器...

  • 程序编译的过程

    hello.c(源程序)是一条高级C语言程序,虽然它是以一种易读的形式,让人们容易理解。但是,它却无法直接驱动硬件...

  • 07--应用加载01--应用加载流程[_dyld]

    应用程序加载 准备条件:dyld-732.8 源码 编译过程 源文件 -> 预编译 -> 编译 -> 汇编 -> ...

  • AndroidNDK——makefile语法详解

    一、编译流程详解 编译流程 编译:将高级语言编写的程序转换为二进制代码可执行性目标程序的过程 四大过程:预处理、编...

网友评论

    本文标题:程序编译过程

    本文链接:https://www.haomeiwen.com/subject/vnierqtx.html