来源:业余码农
作者:Amazing10
01 引子
上一回,我们的主人公小A初次亮相,凭借基础的前后端理解,从技术实现的层面为我们剖析了微信扫码登录的几秒钟里,到底发生了什么。可能很多人因此会好奇,小A到底是做什么的呢?为什么能够弄懂这些原理呢?
其实,小A是一名业余码农。为什么要叫业余码农呢,是因为他觉得自己属于半路出家,很多计算机基础思想都不够专业,还有很大的进步空间,因此称自己为业余码农。
但是兴趣总是最好的老师,这不,小A正又盯着屏幕上的几行代码发愁:
#include int main(){
std::cout << "Hello World!" << std::endl; return 0;}
编译并运行这段 C++ 代码就能够完美打印出Hello World!
,似乎没啥毛病呀!
“计算机是怎么知道我敲的这些代码的意思呢?”小A 苦皱着眉头,喃喃道。原来,我们的业余码农小A 是没想明白计算机是如何将这些一串串的字符转变成计算机能够执行的机器码的,这其实不就是编译原理嘛。
小A 回想起之前上过的数电模电课,知道计算机的世界里都是数字化的,也就是说计算机只知道二进制 0 和 1 。不同数量 01 的组合在计算机的内部构成了不同的指令,而不同指令的组合又构成了不同的操作。
这就好比流水线的生产模式,假如把计算机看作一条流水线,那么在这条流水线上有不同的工位,每一个工位代表着不同的指令。生产不同的产品就需要不同工位的一同参与,可能按顺序执行,也有可能并列执行。
想到这,小A意识到其实这些由 0 和 1 构成的指令应该就是计算机能够执行的机器码。不过那这些机器码好像与上面的 C++ 代码还相差甚远,中间肯定是经历了一系列的转换。嗯?这个过程有点像是翻译的过程,好像是将程序代码翻译成了机器码!
小A 茅塞顿开,好像又找回了之前英语四级怒考 605 分的自信。看来,英语没白学!
计算机理解程序代码的过程是不是就像是将英文翻译成了另一种语言呢?一想到英语的那些高阶语法,小A 就开始忍不住头疼,“不会这编程还得学个什么时态转换语态切换从句倒装吧...”。
不过头疼归头疼,该学的还是得耐着性子学。小A 知道,在计算机真正运行 C++ 程序代码之前,还需要经过复杂的编译过程,这个编译过程似乎对计算机理解程序代码起着关键性作用。
02 C++编译过程
找到了分析问题的方向,小A 迫不及待的到处查询 C+&#