游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3219|回复: 4

vs2005发布模式下优化导致的问题

[复制链接]

8

主题

182

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
发表于 2007-3-17 12:27:00 | 显示全部楼层 |阅读模式


昨天以Release版本运行游戏引擎,突然发现有问题。本来我在原点渲染了一个立方体,在debug模式下能看到,但是Release模式下却看不到。这下惨了。于是一步步的跟踪,最后发现是Release优化导致的。进一步跟踪,发现Release模式下导致两个矩阵相乘出错。

       于是重新建立了一个测试工程,建矩阵代码拷贝过来,再次验证了这个问题。并且更怪异的是,在vs2003调试模式和发布模式下都没有问题。vs2005调试模式也没有问题。但是在发布模式下就有问题了。
  
      到现在,基本确认了是vs2005 Releas模式下优化导致的问题。

       由于本人不太懂汇编,就没有办法再查找下去了。看能否有汇编高手,找到真正的原因。呵呵

http://www.cnitblog.com/Files/hugp1973/TestMFC.rar

15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2007-3-17 16:02:00 | 显示全部楼层

Re:vs2005发布模式下优化导致的问题

和汇编没有啥关系。

FORCEINLINE CMatrix4 operator*(const CMatrix4& Other) const
函数里的栈内对象 CMatrix4        Result被优化掉了。
把这个对象声明成static可以解决问题。

8

主题

182

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
 楼主| 发表于 2007-3-17 20:26:00 | 显示全部楼层

Re:vs2005发布模式下优化导致的问题

感谢yukun84的回答。 的确申明为static可以解决问题。
但是为什么会把 栈内对象 CMatrix4 Result优化掉,应该还是
vs2005的问题吧。因为在vs2003下面优化也是没有问题的。

8

主题

182

帖子

268

积分

中级会员

Rank: 3Rank: 3

积分
268
 楼主| 发表于 2007-3-17 21:11:00 | 显示全部楼层

Re:vs2005发布模式下优化导致的问题

是呀,至少浪费了我两天时间。

15

主题

368

帖子

406

积分

中级会员

Rank: 3Rank: 3

积分
406
发表于 2007-3-17 21:13:00 | 显示全部楼层

Re:vs2005发布模式下优化导致的问题

VC2005的优化手段比VC2003强,是好事。这种情况下本来就该优化的。本来就没有任何编译器可以识别的代码操作这个对象。都是汇编代码在操作内存,编译器哪能识别。自然优化掉。

碰上这种情况自己小心些就是了。本来严格来说汇编就不该和C代码混合在一个函数体中,一个函数体内要么就全部是汇编代码,不能有半句C++代码。否则的话问题多多。要用嵌入汇编就得清楚这些问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 17:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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