书籍作者:阿布编程 | ISBN:9787302643937 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4027 |
创建日期:2024-04-16 | 发布日期:2024-04-16 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
全书共6章,第1章:介绍本书所使用到的主要工具和一些需要心里有数的预备知识;第2章:解析最简单、常用的基础语法,帮助读者适应本书的节奏;第3章:为进阶知识,会从CPU、操作系统的角度,深入分析函数的工作原理和实现细节;第4章:解析经典的C++语法,背后的实现逻辑,并介绍“面向对象”的编程思想及优缺点;第5章:讨论跟操作系统强相关的软件技术,会将所有章节的内容贯穿起来,初步形成一个现代操作系统的运作模型。第6章:我们会讨论一些经典的面试、笔试题,跟读者一起分享工作、学习、求职中的苦与乐。
本书可作为高等院校计算机、自动化及相关专业的本科生或研究生教材,也可供对C/C++工作原理、操纵系统感兴趣的研究人员和工程技术人员阅读参考。
阿布编程,微软云计算与人工智能事业部软件工程师。喜欢关注和敬畏生活中渺小的人和事。在知乎、B站、公众号等社交平台,发布过若干高质量的计算机课程,以其独特的视角、清晰阐述了许多计算机科学中的模糊、难点问题,深受广大学生、教师、计算机从业人员的喜爱。
前
言
编程是进入计算机世界的大门,是人跟计算机交流的方式;很多时候,我们
像学习一门外语一样学习编程语言,只要足够刻苦、耐心,熟背各种语法,都可
以在短时间内写出精彩的程序。
但学的越多,似乎要记忆的东西也就越多;更要命的是,很多语法越来越
玄幻,你心底是否有这样的疑问:难道CPU也需要知道这么多的语法规则吗?
CPU是如何遵守这些连人都觉得十分诡异的程序规则的呢?
答案或许比你想象的要简单很多,CPU眼里并没有这么复杂的语法,它虽
然拥有着飞快的运行速度,但却只能理解最简单的规则。这也就意味着:我们只
需要了解这些简单的规则,就能真实、客观地还原程序运行原理,解释很多奇幻
的语法规则,甚至理解黑客常用的攻击方法,从而编写出更加强壮、安全的代码。
在一次神农架的旅行中,汽车行进在浓密的原始森林中,同行的小学生问了
我一个问题:神话故事是假的吗?思考了良久后,我回答:不确定神话是真的,
但更不敢否定是假的。中国有大禹治水的故事,西方有诺亚方舟的神话,它们发
生的时间相仿,描述的事情相近,我似乎找不到一个理由,去解释在那个通信落
后、语言不通的时代,远隔万里的人类,为什么要合伙编一个故事来欺骗后世子
孙?或许大洪水事件是真的,诺亚方舟也是真的,但受制于当时的科技、文化以
及人类自身的进化水平,很难全面、清晰、深入本质地描述像大洪水这样的重大
事件。或许这也是大洪水事件会有多个版本的原因。
这也正好像今天学习计算机的现状:开发者一边捧着标准教材,一边在网上
VIII
CPU眼里的C/C++
寻找各种教程二次学习。大家似乎都在寻找一个更适合自己或者更加真实的版本。
虽然市面上很多大神的教程、书籍、视频已经把C/C++的本质分析得很好了,
而且各有见解,但似乎还是有一层窗户纸没有被捅破。虽然大神的书籍、教程、
视频让人百看不厌,但观众仍然觉得心里没底。我们总是试图从人的视角解释程
序的行为,迫切找到最权威、最重量级的解释,但似乎很少去从CPU的视角审
视程序。
相比于破解遥远的神话故事,破解代码的运行原理就容易很多,在和大家的
交流中,我发现很多大二的学生,已经具备一探究竟的能力,如果现在还不趁热
打铁地一锤定音,那还要做多少道题、看多少教程、具备多少年的工作经验,才
能自然进化到大彻大悟呢?而这也是本人最终下定决心编写本书的主要原因,我
们已经具备了临门一脚的能力,一个及时的助攻是非常必要的。
当然,仅仅提供一个答案是缺乏科学精神的,如果不能让普通开发者重现、
证实、证伪大神的“金玉良言”,那将非常遗憾,因为不可实践的工程技术,对
工程师而言毫无意义;知识的解释权需要掌握在更多的开发者手里。
全书的所有章节,几乎全部基于最简单、最常见的代码,相信很多读者都曾
经写过这样的代码。配合免费、公开、直观的工具,每一个读者都可以随时拆解、
演绎其中的工作原理,让知识真正属于每一个读者。
最后,本书绝对不是否认其他计算机教程的正确性,相反,没有其他计算机
教程的基础,想读懂本书,也不是一件容易的事情。本书只是换一个视角解读我
们所熟知的知识。如果真有什么差异的话,可能只是视角上的差异。
作者
2023年春
目
录
第1章 预备知识
阅读建议 002
1.1 工具介绍 003
1.2 CPU眼里的程序运行 006
1.3 CPU眼里的汇编语言 012
第2章 基础语法
阅读建议 020
2.1 CPU眼里的main函数 021
2.2 CPU眼里的变量 024
2.3 CPU眼里的goto、if else 028
2.4 CPU眼里的指针变量 032
2.5 CPU眼里的指针本质和风险 039
2.6 CPU眼里的数组 043
2.7 CPU眼里的数组越界 047
2.8 CPU眼里的引用 052
CPU眼里的C/C++
X
2.9 CPU眼里的i++与++i 054
2.10 代码陷阱类型转换 059
第3章 函数原理
阅读建议 064
3.1 CPU眼里的参数传递 065
3.2 CPU眼里的函数括号{} 070
3.3 CPU眼里的调用和返回 076
3.4 CPU眼里的函数指针 083
3.5 CPU眼里的函数返回值 087
3.6 CPU眼里的堆和栈 094
3.7 函数实验回溯函数调用关系 104
第4章 C++特性
阅读建议 108
4.1 CPU眼里的this 109
4.2 CPU眼里的构造函数 111
4.3 CPU眼里的虚函数 115
4.4 CPU眼里的多态 121
4.5 CPU眼里的模板 128
4.6 CPU眼里的malloc和new 131
4.7 面向对象实践依赖反转 135
第5章 高级编程
阅读建议 144
5.1 CPU眼里的虚拟内存 145
5.2 坐井观天的进程 153
5.3 CPU眼里的地址映射 159
目录
XI
XI
5.4 CPU眼里的volatile 164
5.5 CPU眼里的常量 169
5.6 CPU眼里的系统调用 173
5.7 CPU眼里的大端、小端 179
5.8 CPU眼里的上下文 186
5.9 CPU眼里的锁 192
第6章 面试挑战
阅读建议 202
6.1 static、global以及local 203
6.2 数组和双重指针 210
6.3 指针为什么这么难 216
6.4 auto的工作原理 218
6.5 thread_local的工作原理 223
6.6 面试的技巧 227
CPU眼里的C/C++ 计算机科学领域的进步一直都在不断地推动着硬件和软件的发展。在这个无处不在的数字时代,CPU(中央处理器)是计算机的心脏,而C/C++则是编程世界的支柱。本文将探讨CPU眼中的C/C++,解释这两种编程语言如何与计算机硬件交互,以及它们对计算机性能和效率的影响。 C语言于1972年由丹尼斯·里奇(Dennis Ritchie)开发,它的设计初衷是为了实现UNIX操作系统。C语言的一个显著特点是它的高度可移植性,这意味着编写的C代码可以在不同的计算机架构上运行,而不需要大规模的修改。这一特性使得C语言成为了操作系统、嵌入式系统和底层硬件控制的理想选择。C++则在C语言的基础上增加了面向对象编程的特性,使其更适用于大型软件项目的开发。 CPU与C/C++之间的关系可以通过编译器来理解。编译器是一种将高级编程语言(如C/C++)翻译成底层机器语言的工具。当我们编写C/C++代码并将其编译时,编译器将代码转换成一个CPU可以理解的指令集。这个过程涉及到将高级语言的抽象概念(如变量、函数和类)转化为底层硬件操作(如寄存器操作、内存管理和指令执行)。 C/C++的性能和效率优势在于其对底层硬件的直接控制。程序员可以使用C/C++来优化内存使用、多线程处理、指针操作等,从而更好地利用CPU的资源。这使得C/C++成为游戏开发、嵌入式系统设计和高性能计算等领域的首选语言。而与其他高级语言相比,C/C++更容易实现精细的性能调优,因为它提供了更多的控制权。 然而,与其优势相对应的是挑战。C/C++的直接硬件控制也带来了风险,因为不正确的代码可能会导致严重的系统错误。程序员需要对内存管理、指针算术等底层概念有深入的了解,以避免潜在的安全漏洞。此外,C/C++的代码通常更加冗长和复杂,相对于一些高级语言来说,开发周期可能更长。 另一个考虑因素是跨平台问题。尽管C/C++具有高度可移植性,但在不同的操作系统和CPU架构之间仍然存在一些差异。因此,程序员可能需要编写特定于平台的代码,以确保其在不同环境下的兼容性。 尽管C/C++在CPU眼中具有特殊地位,但现代编程世界也出现了许多其他语言和工具,如Python、Java和C#等,它们在某些方面更具便利性和易用性。这些语言通常更容易学习,具有更高的抽象程度,减少了编写底层代码的需求。然而,这种便利性通常以性能上的一些损失为代价。 总之,C/C++是与CPU密切相关的编程语言,它们在计算机科学领域中扮演着关键的角色。它们为程序员提供了对底层硬件的直接控制,使其能够优化性能和效率。然而,与之相关的责任和复杂性也不可忽视。在选择编程语言时,程序员需要权衡各种因素,以确保其项目能够在不同的CPU和操作系统上稳定运行。无论如何,C/C++将继续在CPU眼里保持特殊的地位,为计算机科学的未来提供坚实的基础。
2023-09-03 10:10:49