之前一直不清楚编译原理到底讲的什么,后面听了老师讲解才明白,原来是这么回事,为了方便以后的查找,所以今天把它记了下来。
编译原理分为四步 :
1:预处理 头文件处理、宏定义处理、条件变量处理、特殊标志符处理、去掉注释
执行的代码与生成的文件:gcc -E *.c -o *.i
2:编译处理 对词法、语法、语义进行分析,是否正确,最后生成符号。
执行的代码与生成的文件:gcc -S *.i -o *.s
3:汇编处理 将编译处理后的*.s文件翻译成二进制代码
执行的代码与生成的文件:gcc -c *.s -o *.o
4:链接 找符号、确定data与code段的地址
执行代码与生成的文件:gcc -o * *.o
编译完成后就是执行,在执行的过程中才确定堆栈的地址
内存分三段
1: 堆栈
2 : data {
BSS(未初始化的全局变量)
初始化的全局变量
静态变量
只读区
}
3:code
3G 栈
2G
1G 堆
data
code
0