区别:
一:1. Debug称为调试版本,不做任何优化,便于程序员调试。
2.Release成为发布版本,主要是用于发送给用户的已经优化(优化很重要)的源码,一般是给用户使用的,且用户一般不能调试。
二: 接下来详细介绍一下Release优化的案例,上图(经典例题):
(1). 标记①可以看出:模式为Debug
(2). 标记②可以看出:程序进入了打印"呵呵"的死循环
对于打印呵呵的死循环,这点我们扩充一下知识(关于VS内存堆战区如何分配空间的知识)
上图:
//注意:1.在Debug且是x86环境下,若是在release(对Debug进行优化,即将i地址存放到
//内存栈区的arr的下面)内,则不能无限循环
//2.标记③i变量在arr[]变量定义之前,若反过来不会死循环,会致使越界错误
//3.数组下标增大,数组元素在内存中地址变大
//4.栈内存由高到低先存i后存arr,且i与arr[9]中间空两个内存地址(导致循环的重要原因)
//5.内存栈区存储特点:由高到低
综上所述:导致死循环原因:①Debug未有优化功能
②在VS中,恰巧将i值放在arr[12](虽说越界访问)中,故使得修改 arr[12] = 0也就意味着修改i = 0;(主要原因)
特别注意:why使用Release不会导致死循环?
原因:在这个版本下把i的内容优化到了数组下面低地址处,不会恰好衔接着改变i值。