CPU眼里的C/C++
上QQ阅读APP看书,第一时间看更新

前言

编程是进入计算机世界的大门,是人跟计算机交流的方式;很多时候,我们像学习一门外语一样学习编程语言,只要足够刻苦、耐心,熟背各种语法,都可以在短时间内写出精彩的程序。

但学的越多,似乎要记忆的东西也就越多;更要命的是,很多语法越来越玄幻,你心底是否有这样的疑问:难道CPU也需要知道这么多的语法规则吗?CPU是如何遵守这些连人都觉得十分诡异的程序规则的呢?

答案或许比你想象的要简单很多,CPU眼里并没有这么复杂的语法,它虽然拥有着飞快的运行速度,但却只能理解最简单的规则。这也就意味着:我们只需要了解这些简单的规则,就能真实、客观地还原程序运行原理,解释很多奇幻的语法规则,甚至理解黑客常用的攻击方法,从而编写出更加强壮、安全的代码。

在一次神农架的旅行中,汽车行进在浓密的原始森林中,同行的小学生问了我一个问题:神话故事是假的吗?思考了良久后,我回答:不确定神话是真的,但更不敢否定是假的。中国有大禹治水的故事,西方有诺亚方舟的神话,它们发生的时间相仿,描述的事情相近,我似乎找不到一个理由,去解释在那个通信落后、语言不通的时代,远隔万里的人类,为什么要合伙编一个故事来欺骗后世子孙?或许大洪水事件是真的,诺亚方舟也是真的,但受制于当时的科技、文化以及人类自身的进化水平,很难全面、清晰、深入本质地描述像大洪水这样的重大事件。或许这也是大洪水事件会有多个版本的原因。

这也正好像今天学习计算机的现状:开发者一边捧着标准教材,一边在网上寻找各种教程二次学习。大家似乎都在寻找一个更适合自己或者更加真实的版本。

虽然市面上很多大神的教程、书籍、视频已经把C/C++的本质分析得很好了,而且各有见解,但似乎还是有一层窗户纸没有被捅破。虽然大神的书籍、教程、视频让人百看不厌,但观众仍然觉得心里没底。我们总是试图从人的视角解释程序的行为,迫切找到最权威、最重量级的解释,但似乎很少去从CPU的视角审视程序。

相比于破解遥远的神话故事,破解代码的运行原理就容易很多,在和大家的交流中,我发现很多大二的学生,已经具备一探究竟的能力,如果现在还不趁热打铁地一锤定音,那还要做多少道题、看多少教程、具备多少年的工作经验,才能自然进化到大彻大悟呢?而这也是本人最终下定决心编写本书的主要原因,我们已经具备了临门一脚的能力,一个及时的助攻是非常必要的。

当然,仅仅提供一个答案是缺乏科学精神的,如果不能让普通开发者重现、证实、证伪大神的“金玉良言”,那将非常遗憾,因为不可实践的工程技术,对工程师而言毫无意义;知识的解释权需要掌握在更多的开发者手里。

全书的所有章节,几乎全部基于最简单、最常见的代码,相信很多读者都曾经写过这样的代码。配合免费、公开、直观的工具,每一个读者都可以随时拆解、演绎其中的工作原理,让知识真正属于每一个读者。

最后,本书绝对不是否认其他计算机教程的正确性,相反,没有其他计算机教程的基础,想读懂本书,也不是一件容易的事情。本书只是换一个视角解读我们所熟知的知识。如果真有什么差异的话,可能只是视角上的差异。

作者

2023年春