这篇文章将为大家详细讲解有关Release版错误是怎样产生的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
ReleaseCandidate(RC)候选版本,用于指软件或操作系统的发布,一般与Debug版本相对应,后者可以调试,包括了每个执行码对应的源代码信息,而一般过了测试版时期,基本没有什么问题后,会发布几个略微不同的版本,就叫做rc1、rc2,然后从这里面挑选一个作为正式版本。Release版本去掉了。
Debug和Release编译方式的本质区别
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。
Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug和Release的真正秘密,在于一组编译选项。
下面列出了分别针对二者的选项
(当然除此之外还有其他一些,如/Fd/Fo,但区别并不重要,通常他们也不会引起Release版错误,在此不讨论)
Release版本出错情况
/MD/ML或/MT使用发布版本的运行时刻函数库
/O1或/O2优化开关,使程序最小或最快
/D"NDEBUG"关闭条件编译调试代码开关(即不编译assert函数)
/GF合并重复的字符串,并将字符串常量放到只读内存,防止被修改
实际上,Debug和Release并没有本质的界限,他们只是一组编译选项的集合,编译器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调试版本或是带跟踪语句的发布版本。
有了上面的介绍,我们再来逐个对照这些选项看看Release版错误是怎样产生的
RuntimeLibrary
链接哪种运行时刻函数库通常只对程序的性能产生影响。
调试版本的RuntimeLibrary包含了调试信息,并采用了一些保护机制以帮助发现错误,因此性能不如发布版本。编译器提供的RuntimeLibrary通常很稳定,不会造成Release版错误;倒是由于Debug的RuntimeLibrary加强了对错误的检测,如堆内存分配,有时会出现Debug有错但Release正常的现象。应当指出的是,如果Debug有错,即使Release正常,程序肯定是有Bug的,只不过可能是Release版的某次运行没有表现出来而已。
关于“Release版错误是怎样产生的”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。