代码阅读方法与实践阅读笔记04

第五章讲的是高级控制流程,递归和异常。虽然前面的控制语句已经能满足大部分编程任务,并且也是最常遇到的语句。但这些并不是很常见的部分也很重要。递归代码经常用相似的定义来反映数据结构或算法。异常在C++和Java中用来组织对错误的处理。通过使用软件或硬件的并行性,程序可以增强响应性、有条理的分配工作,或者有效的使用多处理器计算机异常作为语言的一部分而不是由库提供的功能,能够沿着程序的词法和函数的调用栈传播,允许程序员以此结构化的方式处理它们。有些程序并行的执行部分代码,以增强对环境的响应,安排工作的分配,或有效的使用多个计算机或多个处理器计算机。当并行机制不可用时,程序可能必须采用异步信号(能够在任意时间发出的信号)和非局部跳转来响应外部事件。最后,为了提高效率,程序员往往在平常调用C函数的地方,使用C语言预处理器的宏替换功能。

重点总结笔记:

1.采用递归定义的算法和数据结构经常用递归的函数定义来实现.

2.推理递归函数时, 要从基准落伍测试开始, 并认证每次递归调用如何逐渐接近非递归基准范例代码.

3.简单的语言常常使用一系列遵循该语言语法结构的函数进行语法分析.

4.推理互递归函数时, 要基于底层概念的递归定义.

5.尾递归调用等同于一个回到函数开始处的循环.

6.将throws子句从方法的定义中移除, 然后运行Java编译器对类的源代码进行编译, 就可以容易地找到那些可能隐式地生成异常的方法.

7.在多处理器计算机上运行的代码常常围绕进程或线程进行组织.

8.工作群并行模型用于在多个处理器间分配工作, 或者创建一个任务池, 然后将大量需要处理标准化的工作进行分配.

9.基于线程的管理者/工人并行模型一般将耗时的或阻塞的操作分配给工人子任务, 从而维护中心任务的响应性.

10.基于进程的管理者/工人并行模型一般用来重用现有的程序, 或用定义良好的接口组织和分离粗粒度的系统模块.

11.基于流水线的并行处理中, 每个任务都接收到一些输入, 对它们进行一些处理, 并将生成的输出传递给下一个任务, 进行不同的处理.

12.竞争条件很难捉摸, 相关的代码常常会将竞争条件扩散到多个函数或模块; 因而, 很难隔离由于竞争条件导致的问题.

13.对于出现在信号处理器中的数据结构操作代码和库调用要保持高度警惕.

14.在阅读包含宏的代码时, 要注意, 宏既非函数, 也非语句.

15.do…while(0)块中的宏等同于控制块中的语句.

16.宏可以访问在它的使用点可见的所有局部变量.

17.宏调用可改变参数的值

18.基于宏的标记拼接能够创建新的标记符.

posted on 2017-11-19 11:44  Macsad  阅读(96)  评论(0编辑  收藏  举报