程序员路由联盟物联网loT从业者

程序编译过程

2019-01-06  本文已影响4人  Creator_Ly

程序编译过程

程序编译流程

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

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

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

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

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

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

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

memory
上一篇 下一篇

猜你喜欢

热点阅读