IDE Visual studio 优化---关于VS 的Debug版本和Release【疑惑】

原创 2013年12月06日 13:40:36

今天编程遇到一个“奇怪”的现象,for循环里边,10^9次运算,居然0ms就结束,非常的不解,原来是VS自动优化导致的,具体如下:

先看一下我测试的代码:

	int a = 0;
	while (1)
	{
		int i;
		for (i = 0 ; i < 100000; i ++)
		{
			for (int j = 0 ; j < 10000 ; j ++)
			{
				a = i + j;
			}
		}
		cout <<  i << endl;
	}

读者可以试一下,使用Release版的话,这个结果肯定是0ms就把结果输出:


而使用Debug版的话,会好几秒才输出一次,为什么呢?因为Release版的话,VS做了很多优化,你会发现,上边那个代码,for循环对于while里边的其他代码毫无影响,所以我感觉VS将这段代码优化了(我不知道怎么查看优化的代码,还希望看到的朋友知道的话请留言提醒一下,非常感谢):首先检查里边那层j的for循环对于它外边的变量指向的内存是否会有影响,如果没有影响,则不执行里边部分,仅仅执行for(int i = 0 ; i < 100000 ; i ++){},而Debug不做优化,所以两层循环都进入。因此我又继续做了一个测试:

	int a = 0;
	while (1)
	{
		long i;
		for (i = 0 ; i < 1000000000; i ++)
		{
			for (int j = 0 ; j < 1; j ++)
			{
				a = i + j;
			}
		}
		cout << i << endl;
	}
也就是把10^9全部放在外边,使用Release下运行,发现依然是0ms,看来VS将for(int i = 0 ; i < 100000 ; i ++){}进一步优化,这个怎么优化?难道是直接使用for的限制100000000就输出了吗?不清楚!

	int a = 0;
	while (1)
	{
		long i;
		for (i = 0 ; i < 1000000000; i ++)
		{
			for (int j = 0 ; j < 1; j ++)
			{
				a = i + j;
				i++;
			}
		}
		cout << i << endl;
	}
这样的时候,居然时间慢下来好多,也就是发现里层循环对i有影响,执行了呗,但是这样:

	int a = 0;
	while (1)
	{
		long i;
		for (i = 0 ; i < 1000000000; i ++)
		{
			i++;
		}
		cout << i << endl;
	}
居然是0ms,而如果输出的是a:

	int a = 0;
	while (1)
	{
		long i;
		for (i = 0 ; i < 1000000000; i ++)
		{
			for (int j = 0 ; j < 1; j ++)
			{
				a = i + j;
				i++;
			}
		}
		cout << a << endl;
	}
又变成稍微长点的时间(大约0.5秒)输出,此时换成Debug版本,居然要15秒才运行出来,非常非常的不明白VS到底是如何优化的,所以对于程序中,有关遇到运行速度、效率等等地方的时候,要格外注意这个优化问题,而且不仅仅是VS,而是更底层的nmake的编译设置。











相关文章推荐

VS优化Release代码速度

右键工程->配置属性->C/C++->优化-> “优化”:使速度最大化; “优选大小或速度”:代码速度优先 原来每帧170ms提高到了70ms........
  • zinnc
  • zinnc
  • 2016年09月09日 22:28
  • 1359

关于C++Release后的优化感想

最近学了点汇编,虽然写不出什么代码,但是好歹看懂一点了。于是突然想去看看C++对代码优化到什么程度。 首先看debug,debug是完全没有什么优化了,除此之外还加了很多检测的过程,难怪效率那么低。...

Visual Studio中的debug和release版本的区别

Visual Studio中的debug和release版本的区别 Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优...

实现Visual Studio Release版本工程调试的方法

软件开发过程中的Debug与Release问题         软件开发的过程中,我们往往使用的是Debug版本,究其原因无非就是使用Debug进行开发调试方便容易发现并纠正问题。这样,伴随着...

【IDE-Visual Studio】VS2010:微操作

1:框选(列选代码) 按住【Alt】键,按住鼠标左键拖动鼠标 //以下绝大部分在调试状态下使用 2:监视窗口的打开 【】表示一起按下 → 表示下一步 【Ctrl+Alt+w】→ 【1】(非小键盘) ...

Visual Studio中Debug和Realse版本编译的结果不同

提要 最近用Visual Studio用的比较多,虽然慢了点,但是用着熟了感觉还是不错的,特别是2013里面的自动格式化代码,对我这种代码整洁强迫症患者真是莫大的帮助。        但是,今天这个坑...

从网上找的 visual studio 的各个版本下载地址,很全,从 6.0 一直 到 vs2013,要的拿去吧

Microsoft Visual Studio 6.0 下载: 英文版360云盘下载:http://l11.yunpan.cn/lk/sVeBLC3bhumrI 英文版115网盘下载:http://1...
  • zanfeng
  • zanfeng
  • 2014年11月06日 14:42
  • 34359

【VS2015问题】Visual Studio Community 2015版本遇到的一些问题

下载Visual Studio Community 2015版本,安装了很久 如果30天免费试用到期,怎么办, 注册一个账号,填入你的账号信息,登录 会如下图所示,点击检查更新证书 Check fo...

win7 64位,vs2010(visual studio2010)环境下配置openCV2.4.8版本,以及可能遇到的问题

本文讲述在系统为win7的64位机,开发环境为vs2010且openCV版本为2.4.8的环境下,配置openCV的操作过程。 我的openCV安装在路径D:\openCV\opencv\中。(清楚这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IDE Visual studio 优化---关于VS 的Debug版本和Release【疑惑】
举报原因:
原因补充:

(最多只允许输入30个字)