《代码阅读方法和实践》二
1.采用递归定义的算法和数据结构经常用递归的函数定义来实现。
2.推理递归函数时,要从基准范例测试开始,并论证每次递归调用如何逐渐接近非递归基准范例代码
3.简单的语言常常使用一系列遵循该语言语法结构的函数进行语法分析。
4.推理归调用等同于一个回到函数开始处的循环。
5.将throws子句从方法的定义中移除,然后运行Java编译器对类的源代码进行编译,就容易地找到那些可能隐式地生成异常的方法。
6.在多处理器计算机上运行的代码常常围绕进程或线程进行组织。
7.工作群并行模型用于在多个处理器间分配工作,或者创建一个任务池,然后将大量需要处理的标准化的工作进行分配。
8.基于线程的管理者/工人并行模型一般将耗时的或阻塞的操作分配给工人子任务,从而维护中心任务的响应性。
9.基于进程的管理者/工人并行模型一般用来重用现有的程序,或用定义良好的接口组织和分离粗粒度的系统模块。
10.基于流水线的并行处理中,每个任务都接收到一些输入,对它们进行一些处理,并将生成的输出传递给下一个任务,进行不同的处理。
11.竞争条件很难捉摸,相关的代码常常会将竞争条件扩散到多个函数或模块;因而,很难隔离由于竞争条件导致的问题。
12.对于出现在信号处理品中的数据结构操作代码和库调用要保持高度警惕。
13.在阅读包含宏的代码时,要注意,宏既非函数,也非语句。
14.do ... while(0)块中的宏等同于控制块中的语句。
15.宏可以访问在它的使用点可见的所有局部变量。
16.宏调用可以改变参数的值。
17.基于宏的标记拼接能够创建新的标记符。