关于编译器的优化和调试信息
编译器是否生成调试信息仅仅取决于:(pdb)
linker->Debug->生成调试信息那一行(Debug:生成,不Debug:不生成)
编译器是否对代码进行优化:
C++->optimization->Od:不优化;O1:使代码块(二进制)最小;O2:使程序运行最快
编译器优化:/O
这些优化功能在某些情况下可使应用程序文件变得更小,使应用程序的运行速度更快,或加速生成过程。
优化是在LINK之后的,也就是说 优化之后的代码,某些地方会和初始代码不同而导致与pdb不符,导致调试定位出错
资料:
1.通常,当您尝试通过一个调试器去调试一个高度优化过的程序,与初始代码相关的许多信息已无法呈现 — 又或者即便可以显示,也不正确。通常的情形包括调试一个已被内联的函数或显示一个已被优化的变量值。这些情形经常需要人工映射汇编代码或程序的其他展现形式来与初始代码进行比较 — 这一过程很困难或很容易出错。
2.源自MSDN:
优化是将一段代码转换为其他功能上等效的代码以提高一个或多个特征的过程。两个最重要的特征是代码速度和大小。其他特征包括执行代码所需的能量、编译代码所花费的时间、生成的代码需要实时 (JIT) 编译的情况,以及 JIT 编译代码所花费的时间。
编译器不断改善用于优化代码的技术。但是,它们不是完美的。当然,与其花费时间手动调整程序,通常更富有成效的做法是,使用编译器提供的特定功能并让编译器对代码进行调整。