for循环竟然先执行递增,后执行判断,懂汇编的看下怎么回事!!
for (; itRequest != vecRequest.end(); ++itRequest)
011B78D9 lea ecx,[itRequest]
011B78DC call std::_Vector_const_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::operator++ (11B9E30h)
011B78E1 lea edx,[ebp-5Ch]
011B78E4 push edx
011B78E5 lea ecx,[ebp-28h]
011B78E8 call std::vector<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::end (11B9D20h)
011B78ED mov dword ptr [ebp-6Ch],eax
011B78F0 mov eax,dword ptr [ebp-6Ch]
011B78F3 mov dword ptr [ebp-70h],eax
011B78F6 mov byte ptr [ebp-4],4
011B78FA mov ecx,dword ptr [ebp-70h]
011B78FD push ecx
011B78FE lea ecx,[itRequest]
011B7901 call std::_Vector_const_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::operator!= (11B9F70h)
011B7906 mov byte ptr [ebp-4Dh],al
011B7909 mov byte ptr [ebp-4],3
011B790D lea ecx,[ebp-5Ch]
011B7910 call std::_Vector_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > >::~_Vector_iterator<boost::shared_ptr<otnmudp::OTNMCommunicationData>,std::allocator<boost::shared_ptr<otnmudp::OTNMCommunicationData> > > (11B8180h)
011B7915 movzx edx,byte ptr [ebp-4Dh]
011B7919 test edx,edx
011B791B je unm::manager::CmdSender<boost::shared_ptr<otnmudp::OTNMCommunicationData> >::Run+0FEh (11B793Eh)
[解决办法]
你这什么编译器,太奇怪了
[解决办法]
你写成itRequest++试试看
[解决办法]
boost, 代码不懂啊,呵呵
写了个简单的测试代码
int i=0;003E136E mov dword ptr [i],0 int j=1;003E1375 mov dword ptr [j],1 003E137C jmp main+37h (3E1387h) for(; i<5;i++)003E137E mov eax,dword ptr [i] 003E1381 add eax,1 003E1384 mov dword ptr [i],eax 003E1387 cmp dword ptr [i],5 003E138B jge main+46h (3E1396h) { j=0; //test而已003E138D mov dword ptr [j],0 }003E1394 jmp main+2Eh (3E137Eh) return 0;003E1396 xor eax,eax }
[解决办法]
一般习惯for和while循环写成汇编的时候都会处理成类似这样的模式,所以你会看到递增在前面
for (; a > b; ++a) { 循环体 }
跳转到[判断]
[递增]:++a
循环体
[判断]: 如果a > b跳转到[递增]