const int NSIZE = 5;
棧上配置設定記憶體并初始化、指派
unsigned stack_[NSIZE];
memset(stack_,0,sizeof(unsigned)*NSIZE);
for (int i = 0; i < NSIZE; i++)
{
stack_[i] = i;
}
彙編:
unsigned stack_[NSIZE];
memset(stack_,0,sizeof(unsigned)*NSIZE);
00E313F8 push 14h
00E313FA push 0
00E313FC lea eax,[stack_]
00E313FF push eax
00E31400 call _memset (0E31078h)
00E31405 add esp,0Ch
for (int i = 0; i < NSIZE; i++)
00E31408 mov dword ptr [ebp-28h],0
00E3140F jmp wmain+4Ah (0E3141Ah)
00E31411 mov eax,dword ptr [ebp-28h]
00E31414 add eax,1
00E31417 mov dword ptr [ebp-28h],eax
00E3141A cmp dword ptr [ebp-28h],5
00E3141E jge wmain+5Ch (0E3142Ch)
//[ebp-28h為i的位址,
{
stack_[i] = i;
00E31420 mov eax,dword ptr [ebp-28h]
00E31423 mov ecx,dword ptr [ebp-28h]
00E31426 mov dword ptr stack_[eax*4],ecx
}
00E3142A jmp wmain+41h (0E31411h)
堆上配置設定記憶體并初始化、指派
unsigned* heap_ = new unsigned[NSIZE];
memset(heap_,0,sizeof(unsigned)*NSIZE);
for (int i = 0; i < NSIZE; i++)
{
heap_[i] = i;
}
反彙編:
unsigned* heap_ = new unsigned[NSIZE];
00E3142C push 14h
00E3142E call operator new (0E31190h)
00E31433 add esp,4
00E31436 mov dword ptr [ebp-10Ch],eax
00E3143C mov eax,dword ptr [ebp-10Ch]
00E31442 mov dword ptr [heap_],eax
memset(heap_,0,sizeof(unsigned)*NSIZE);
00E31445 push 14h
00E31447 push 0
00E31449 mov eax,dword ptr [heap_]
00E3144C push eax
memset(heap_,0,sizeof(unsigned)*NSIZE);
00E3144D call _memset (0E31078h)
00E31452 add esp,0Ch
for (int i = 0; i < NSIZE; i++)
00E31455 mov dword ptr [ebp-40h],0
00E3145C jmp wmain+97h (0E31467h)
00E3145E mov eax,dword ptr [ebp-40h]
00E31461 add eax,1
00E31464 mov dword ptr [ebp-40h],eax
00E31467 cmp dword ptr [ebp-40h],5
00E3146B jge wmain+0ABh (0E3147Bh)
{
heap_[i] = i;
00E3146D mov eax,dword ptr [ebp-40h]
00E31470 mov ecx,dword ptr [heap_]
00E31473 mov edx,dword ptr [ebp-40h]
00E31476 mov dword ptr [ecx+eax*4],edx
}
00E31479 jmp wmain+8Eh (0E3145Eh)