程序编译步骤
-
预处理
宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法
-
编译
检查语法,将预处理后文件编译生成汇编文件
-
汇编
将汇编文件生成目标文件(二进制文件)
-
链接
C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去
流程处理如下图所示:
Snip20190213_1.png
gcc编译过程
分步操作
-
预处理
gcc -E HelloWorld.c -o HelloWorld.i
-
编译
gcc -S HelloWorld.i -o HelloWorld.s
-
汇编
gcc -c HelloWorld.s -o HelloWorld.o
-
链接
gcc HelloWorld.o -o HelloWord_elf
代码内容及操作流程如下图所示:
Snip20190213_2.png
Snip20190213_3.png
一步操作
gcc HelloWorld.c -o HelloWorld
CPU内部结构与寄存器
64位和32位系统区别
- 寄存器是CPU内部最基本的存储单元
- CPU对外是通过总线(地址、控制、数据)来和外部设备交互的,总线的宽度是8位,同时CPU的寄存器也是8位,那么这个CPU就叫8位CPU
- 如果总线是32位,寄存器也是32位的,那么这个CPU就是32位CPU
- 有一种CPU内部的寄存器是32位的,但总线是16位,准32位CPU
- 所有的64位CPU兼容32位的指令,32位要兼容16位的指令,所以在64位的CPU上是可以识别32位的指令
- 在64位的CPU构架上运行了64位的软件操作系统,那么这个系统是64位
- 在64位的CPU构架上,运行了32位的软件操作系统,那么这个系统就是32位
- 64位的软件不能运行在32位的CPU之上
寄存器、缓存、内存三者关系
- 按与CPU远近来分,离得最近的是寄存器,然后缓存(CPU缓存),最后内存
- CPU计算时,预先把要用的数据从硬盘读到内存,然后再把即将要用的数据读到寄存器。于是 CPU<--->寄存器<--->内存,这就是它们之间的信息交换
- 因为如果老是操作内存中的同一址地的数据,就会影响速度。于是就在寄存器与内存之间设置一个缓存
- 从远近来看:CPU〈---〉寄存器〈---> 缓存 <---> 内存
网友评论