1.3 了解编译系统如何工作是大有益处

程序员必须知道编译系统是如何工作的原因:优化程序性能,理解链接时出现的错误,避免安全漏洞。

优化程序性能

为了在C程序中做出好的编码选择,我们需要了解一些机器代码以及编译器将不同的C语句转换为机器代码的方式。

  • 一个switch语句是否总是比一系列的if-then-else语句高效得多?
  • 一个函数调用的开销有多大?
  • while循环比for循环更有效吗?
  • 指针引用比数组索引更有效吗?
  • 为什么将循环求和的结果放到一个本地变量中,与将其放到一个通过引用传递过来的参数中相比,运行速度要快很多呢?
  • 为什么我们只是简单的重新排列一下一个算术表达式中的括号就能让一个函数运行得更快?

以上的问题,在后面几章中都会有答案

理解链接时出现的错误

一些令人困扰的程序错误往往都是和链接器的操作有关

  • 链接器报告它无法解析一个引用,这是什么意思?
  • 静态变量和全局变量的区别是什么?
  • 如果你在不同的C文件中定义了名字相同的两个全局变量会发生什么?
  • 静态库和动态库的区别是什么?
  • 我们在命令行是哪个排列库的顺序有什么影响?
  • 为什么有些链接错误知道运行时才会出现?

以上的问题,在后面几章中都会有答案

避免安全漏洞

学习安全编程,理解数据和控制信息存储在程序栈上的方法会引起的后果。

问题

现在各个平台常用编译器的特点分别是什么?