在高级语言出现的早期,很可能根本就没有这个区别。高级语言被编译成可执行的机器代码,一种版本就足够了。
但是人们发现那些可执行的机器码是可以被优化的。比如说已经定义了但没有使用的变量、根本不可能执行到的代码,
完全可以去除。一些跳转来跳转去的复杂逻辑,可以用简单的跳转替代。一些多余指令才达到目的的情况,实际上用
一条指令就足够了。连续不断的优化操作,是最终编译越来越简洁、高效。
但是这又出现了另一个问题。当bug发生时,开发者需要调试。然而经过优化的代码,常常看上去已经和原来的
高级语言逻辑大相径庭(虽然它们之间的功能应该是等价的)。这样以来调试者就往往摸不着头脑。此时就希望编译
器不要优化或者少优化,于是出现所谓“调试版”和“发行版”的区别。调试版基本不优化;发行版则一般都优化到极致。
在windows应用程序编程中 ,一般称为Debug版本和Release版本。但是这个名字并非放之四海而皆准,比如windows驱动开发中,又一般称为check版本和Free版本。但是意义是一样的。