编译选项:
-E : 预处理
-S : 编译
-c : 汇编
-o : 生成
-v : 查看过程
-Wall: Walling严格编译
-O0 : 去cpu优化
-O1 : 进行优化 , 优化程度越高,编译时间越久,运行越快
-g : 可以进行gdb调试
预处理 gcc -E xx.c -o xx.i //将头文件内容拷贝到xx.i文件中,将宏展开,忽略所有的注释,处理完条件编译 ,生成预处理文件,
编译 gcc -S xx.c -o xx.s //将程序编译,生成汇编文件
汇编 gcc -c xx.s -o xx.o //将程序汇编,生成目标文件 该文件内容由二进制的计算机语言组成
链接 gcc xx.o -o xx //生成可执行文件 将各个目标文件链接起来,若有外部文件会去寻找
xx.c --- xx.i --- xx.s --- xx.o
从编译到汇编只对当前文件进行处理
因此若程序为
#include<stdio.h>
extern void fun(void) ;
int main(void)
{
fun();
return 0;
}
则从预处理到汇编过程该程序都不会报错
多文件联合汇编 gcc xx.c yy.c -o app
cpu优化:
int a=10; //在内存中占用4个字节空间,该空间取名为a,将值放入这个空间内
int b= a; //从内存读取a的值送入cpu中,然后再将cpu中的a传给b
int c =a; //直接从cup中将a的值传给c
若有cpu优化,当我们进行了非常规的方式,比如通过硬件直接去修改a的值,再定义一个int d =a
此时d的值仍然从cup中去将原来的a传给d
去cpu优化
volatile int a=10;
int b = a;
int c =a ;
去cpu优化后每次都要从内存中去读取a的内容,再通过cpu传给b空间和c空间