嗨,请注意,这是作业。我得到了一个由 MSVC 32 位版本生成的带有优化的程序集,我应该将它解码回 C++。我已将函数的顶部包含在我遇到问题的行中。评论是我的,我是在试图理解这一点时写的。
注意:代码应该是从 C++ 生成的。不是传统的 ASM。注 2:代码中有一处未定义行为。
这是我坚持的路线
TheFunction: ; TheFunction(int* a, int s);
0F2D4670 push ebp ; Push/clear/save ebp
0F2D4671 mov ebp,esp ; ebp now points to top of stack
0F2D4673 push ecx ; Push/clear/save ecx
0F2D4674 push ebx ; Push/clear/save ebs
0F2D4675 push esi ; Push/clear/save esi
0F2D4676 mov ebx,edx ; ebx = int s
0F2D4678 mov esi,1 ; esi = 1
0F2D467D push edi ; calling convention ; Push/clear/save edi
0F2D467E mov edi,dword ptr …Run Code Online (Sandbox Code Playgroud) 以下两个for循环之间有什么区别?
for(int i = 0; i < 5; i++)
{
}
Run Code Online (Sandbox Code Playgroud)
和
for(int i = 0; i < 5;)
{
//End of whatever code to do.
i++;
}
Run Code Online (Sandbox Code Playgroud)
根据http://www.cplusplus.com/doc/tutorial/control/,应该没有区别.然而,当我运行我的代码(下面的代码)时,取决于iter ++的位置,存在差异.
在这个程序中,我有一个单独的线程运行来获取输入.当我将iter ++移到底层时会发生什么,当一个单独的客户端连接到服务器时,我必须在响应之前在cin流中输入一些内容.
当iter ++位于for循环内部时,这个问题不会发生.
我希望我的iter ++位于底部的原因是当我收到断开连接时,我可以删除地图中的会话.
for (iter = network->sessions.begin(); iter != network->sessions.end(); iter++)
{
//bool Deleted = false;
int data_length = network->receiveData(iter->first, network_data);
if (data_length < 0)
{
//no data recieved
continue;
}
if (data_length == 0)
{
printf("Data closed GRACEFULLY LOL \n");
continue;
}
int …Run Code Online (Sandbox Code Playgroud)