我曾在 02 讲 的最后提到,C 代码的完整编译流程可以被分为四个阶段:代码预处理、编译优化、汇编,以及链接。在前三个阶段中,编译器会对输入的源代码文件依次进行分析、优化和转换,并生成可以在当前平台上使用的对象文件。紧接着,链接过程可以将程序依赖的所有对象文件进行整合,并生成最终的二进制可执行文件。 今天 […]

2023年1月15日 42点热度 Baimi 阅读全文

对于计算机软件的正常运作,内存(Main Memory)所发挥作用的重要性不言而喻。无论是处在“幕后”的操作系统,还是位于“台前”的用户应用程序,它们在运行时都会将所需数据从磁盘等外部存储器转移至内存。实际上,内存和 CPU 芯片上的 L1、L2 等高速缓存,一同构成了计算机中用于支撑程序高效运行的缓存系统。 今天,我 […]

2023年1月14日 41点热度 Baimi 阅读全文

和之前的内容相比,在这一模块中,我们将会从“台前”走向“幕后”:从由 C 代码直观表示的程序逻辑,走向程序在运行过程中,背后与操作系统交互时的具体原理。相信学习完这个模块后,你会对一个 C 程序从代码编写,到通过编译,再到最终被操作系统运行的完整过程有更深入的理解。其中,程序的运行细节仅与所在操作系统紧密相关,因此,这 […]

2023年1月6日 48点热度 Baimi 阅读全文

在“C 核心语法实现篇”中,通过观察 C 代码被编译后的产物,我们了解了 C 基本语法在机器指令层面的多种具体实现细节。进入“C 工程实战篇”后,通过探索 C 标准库,我们发现了 C 语言为我们提供的更多优秀能力,并同时深入分析了它们的内部实现原理。在此基础之上,通过探讨 C 项目编码规范、代码优化技巧、自动化测试与结 […]

2022年12月26日 76点热度 Baimi 阅读全文

一、 Mysql 索引 1.1 Mysql 如何实现的索引机制? InnoDB 索引与 MyISAM 索引实现的区别是什么? 一个表中如果没有创建索引,那么还会创建 B+ 树吗? 1.2 说一下 B+ 树索引实现原理(数据结构) 聚簇索引与非聚簇索引 B+ 树实现有什么区别? 说一下 B+ 树中聚簇索引的查找(匹配)逻 […]

2022年12月26日 127点热度 Baimi 阅读全文

在 24 讲中,我对本次实战项目将要构建的程序 FibServ 的功能做了基本介绍,并从理论的角度,带你对它的基本实现方案有了一个初步认识。而这一讲,我们将通过实际编码,来应用这些理论知识。 在后续讲解到相关代码时,我也会在整段代码的第一行,通过注释的方式将这些代码的所在源文件标注出来。比如注释“libs/struct […]

2022年12月26日 59点热度 Baimi 阅读全文

在之前的课程中,我们曾遇到过很多段示例代码。而这些代码有一个共性,就是它们都十分短小,以至于可以被整理在一个单独的 .c 文件中。并且,通过简短的一行命令,我们就可以同时完成对代码的编译和程序的运行。 但现实情况中的 C 项目却往往没这么简单,动辄成百上千的源文件、各种各样的外部依赖与配置项,这些都让事情变得复杂了起来 […]

2022年12月25日 60点热度 Baimi 阅读全文

“测试”是每个软件在其开发生命周期(SDLC)中都不可或缺的一个重要阶段。通过对软件进行各种不同类型的测试,我们能够从多个维度验证软件的功能表现,并在出现偏差时及时修正,以确保它们可以按照预期工作。根据实施方式、深入粒度、应用场景及目的等因素的不同,测试可以被分为多种类型。其中,有些测试较为基础和通用,甚至被作为软件开 […]

2022年12月24日 78点热度 Baimi 阅读全文
1234512