读书人

关于vs2010 release编译有些代码没有编

发布时间: 2013-01-19 11:41:36 作者: rapoo

关于vs2010 release编译有些代码没有编译的问题[查看汇编后得知]
原来的代码[非汇编]
if(lpObj->comboSkill.dwTime>=GetTickCount())
{
//_asm{mov dword ptr ss:[ebp+0x20],1}
GCMagicAttackNumberSend(lpObj,59,lpTargetObj->m_Index,1);
bCombo=1;
}
使用release编译[汇编代码]
; 274 : if(lpObj->comboSkill.dwTime>=GetTickCount())

000adff 15 00 00 00
00 call DWORD PTR __imp__GetTickCount@0
000b339 87 94 00 00
00 cmp DWORD PTR [edi+148], eax
000b972 12 jb SHORT $LN1@gObjAttack

; 275 : {
; 276 : //_asm{mov dword ptr ss:[ebp+0x20],1}
; 277 : GCMagicAttackNumberSend(lpObj,59,lpTargetObj->m_Index,1);

000bb8b 0b mov ecx, DWORD PTR [ebx]
000bd6a 01 push 1
000bf51 push ecx
000c06a 3b push 59; 0000003bH
000c257 push edi
000c3ba 96 6a 40 00 mov edx, 4221590; 00406a96H
000c8ff d2 call edx
000ca83 c4 10 add esp, 16; 00000010H
$LN1@gObjAttack:

; 278 : bCombo=1;
; 279 : }
; 280 : }
; 281 : }
; 282 : }
; 283 : }
; 284 : }
; 285 : _asm


发现 bCombo=1; 没有汇编,直接跳过此语句

而使用debug模式编译,那么bCombo=1;这个语句就是正确汇编的,请问大大们是什么原因?
[解决办法]
没用的src,会被优化的,
vc 有选项设置的,你可以选择不要,

不然 release版本 怎么会比 debug快呢
而且 有时候顺序也会被调整的,比如避免对同一个寄存器 进行连续操作

[解决办法]
不需要不编译。

读书人网 >C++

热点推荐