今早赖床了,只是抓紧看了10分钟的书。我决定以后用费曼学习法,把学习到的东西写出来,提高学习效率,防止努力半天一无所获。
问题1. hello.c 从创建到执行发生了什么?
- 起点(昨天看的): hello.c 是个ASCII码编码的文本文件,本质上存储的是一堆010101。怎么转换的?一个字符由一个字节编码,一个字节有八个bit(最大255)。
- 编译,*.c是给人看的,怎么转成机器能看懂的?1) 预编译:加载头文件 (#include <stdio.h>)2)转成汇编语言 (比如main 函数) 3)加载库(printf,C编译器自带的),这里记不清了,好像短了一步。
- 执行。这里涉及到各种存储的分配
晚上下班后看看
0126 update 一下,上面写错了
2. 编译,*.c是给人看的,怎么转成机器能看懂的?1) 预编译:加载 插入头文件 (#include <stdio.h>)2)转成汇编语言 (比如main 函数) **3)把汇编语言翻译成机器语言指令,%可重定位目标程序%(二进制) **3 4)加载库(printf,C编译器自带的已经单独编译好的printf.o目标文件,与上一步hello.o合并,存储成%可执行目标程序%的hello),这里记不清了,好像短了一步 。
3. 执行。这里涉及到各种存储的分配 各种硬件(CPU、内存、磁盘(竟然也是IO设备)、IO设备)的分工合作
我猜可重定位(relocatable object program)意思就是能搬来搬去的,小的可执行单元,就像printf,可以被搬来合并到hello.o中