游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6232|回复: 12

VC++2005 的STL运行速度在Debug和release下的差别

[复制链接]

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-9-2 21:32:00 | 显示全部楼层 |阅读模式
前段时间看到朋友的跟我说VC++的STL在Debug和release下的差别. 当时没怎么在意.
今天终于领教了。
我做字体绘制的时候, 把字体做cache.放到一个map里. 绘制的时候从map里查到这个Texture. 在debug下怎么跑都是20fps.  基本没法用。后来一气之下用release编译了一下.竟然有250fps.
后来将这个字体的cache放到一个数组里.速度也提高到了5xfps. 剩下的速度差距应该是程序里其他的stl容器的问题了。
   回头再查
sf_200692213138.gif

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-9-2 21:34:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

请问Debug和release有什么区别?

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
 楼主| 发表于 2006-9-2 21:50:00 | 显示全部楼层

Re: VC++2005 的STL运行速度在Debug和release下的差别

debug版的
sf_200692215011.gif

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
 楼主| 发表于 2006-9-2 22:05:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

debug比release多了很多运行时检查 ,
我现在准备明天把stl换成 stl_port . 今天还没法编译. 先把map换成vc的hash_map看看.速度还是差不多.

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2006-9-3 02:29:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

stlport性能也好不了太多。。。

debug和r饿lease在stl上面差别倒不一定是检查的问题,什么代码展开,优化什么的用stl啥都没有。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
 楼主| 发表于 2006-9-3 11:35:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

哎...

0

主题

202

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2006-9-4 00:52:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

不要大户乱说,误人子弟的!楼上的要注意

1

主题

4

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2006-9-4 01:28:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

这不明摆着的事吗 map是映射复杂度是O(log n) 255个物体就要比较8次 为什么不用VERCTOR呢O(1)....

96

主题

529

帖子

539

积分

高级会员

Rank: 4

积分
539
发表于 2006-9-4 21:13:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

除此以外,Debug和Release版本设置的默认生成代码方式也不同(不过可以在IDE设置里更改),Release会从很多方面尽量优化代码,而Debug则比较尊重原著。
比如
while(0)
{ ... }
在Release中会被跳过,不产生任何对应的汇编代码,而Debug则会很乖地按主人的原意一板一眼地翻译,显得更死板。
Release虽然看起来比Debug更聪明,但有时聪明会反被聪明误,比如当开发者想实现一个nop延时程序,他打入下面这段代码:
for(int i = 1; i < 100000; ++i)
   for(int j = 1; j < 100000; ++j)
        ;
而这段代码在Release版本中不会产生任何对应的汇编代码,起不到延迟的效果。与开发者的初衷背道而驰,这时候就需要在循环体加一些"有意义"的代码骗过编译器,让编译器觉得此循环有“实际意义”,这样才能起到延迟的作用。

1

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2009-7-15 23:28:00 | 显示全部楼层

Re:VC++2005 的STL运行速度在Debug和release下的差别

我一个程序用了STL的list,release和debug版本的速度差距大约10倍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-19 18:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表