Assembly code generated by MSVC++ 6.0 for new and new[]:
Foo *pf = ::new Foo; | Foo *pf = ::new Foo[5]; | |
push 0Ch call operator new (00420a70) add esp,4 mov dword ptr [ebp-18h],eax mov dword ptr [ebp-4],0 cmp dword ptr [ebp-18h],0 je main+5Ah (0040168a) push 0 push 0 push 0 mov ecx,dword ptr [ebp-18h] call @ILT+530(Foo::Foo) (00401217) mov dword ptr [ebp-24h],eax jmp main+61h (00401691) mov dword ptr [ebp-24h],0 mov eax,dword ptr [ebp-24h] mov dword ptr [ebp-14h],eax mov dword ptr [ebp-4],0FFFFFFFFh mov ecx,dword ptr [ebp-14h] mov dword ptr [ebp-10h],ecx |
push 40h call operator new (00420b90) add esp,4 mov dword ptr [ebp-18h],eax mov dword ptr [ebp-4],0 cmp dword ptr [ebp-18h],0 je main+75h (004016b5) push offset @ILT+575(Foo::~Foo) (00401244) push offset @ILT+130(Foo::`default constructor') (00401087) mov eax,dword ptr [ebp-18h] mov dword ptr [eax],5 push 5 push 0Ch mov ecx,dword ptr [ebp-18h] add ecx,4 push ecx call `eh vector constructor iterator' (00420af0) mov edx,dword ptr [ebp-18h] add edx,4 mov dword ptr [ebp-24h],edx jmp main+7Ch (004016bc) mov dword ptr [ebp-24h],0 mov eax,dword ptr [ebp-24h] mov dword ptr [ebp-14h],eax mov dword ptr [ebp-4],0FFFFFFFFh mov ecx,dword ptr [ebp-14h] mov dword ptr [ebp-10h],ecx |
Assembly code generated by MSVC++ 6.0 for delete and delete[]:
::delete pf; | ::delete [] pf; | |
mov edx,dword ptr [ebp-10h] mov dword ptr [ebp-24h],edx mov eax,dword ptr [ebp-24h] mov dword ptr [ebp-20h],eax cmp dword ptr [ebp-20h],0 je main+0B0h (00401700) push 0 mov ecx,dword ptr [ebp-20h] call @ILT+520(Foo::`scalar destructor') mov dword ptr [ebp-2Ch],eax jmp main+0B7h (00401707) mov dword ptr [ebp-2Ch],0 mov ecx,dword ptr [ebp-2Ch] push ecx call operator delete (00406ec0) add esp,4 |
mov edx,dword ptr [ebp-10h] mov dword ptr [ebp-24h],edx mov eax,dword ptr [ebp-24h] mov dword ptr [ebp-20h],eax cmp dword ptr [ebp-20h],0 je main+0B0h (004016f0) push 3 mov ecx,dword ptr [ebp-20h] call @ILT+315(Foo::`vector destructor') mov dword ptr [ebp-2Ch],eax jmp main+0B7h (004016f7) mov dword ptr [ebp-2Ch],0 |
This code:
generates this:char *buffer = ::new char[sizeof(Foo)]; // allocate 12 bytes on the heap Foo *pf2 = ::new (buffer) Foo(1, 2, 3); // construct a Foo object in buffer (placement)
char *buffer = ::new char[sizeof(Foo)]; // allocate 12 bytes on the heap
push 0Ch
call operator new (004210b0)
add esp,4
mov dword ptr [ebp-20h],eax
mov eax,dword ptr [ebp-20h]
mov dword ptr [ebp-10h],eax
Foo *pf2 = ::new (buffer) Foo(1, 2, 3); // construct a Foo object in buffer (placement)
mov ecx,dword ptr [ebp-10h]
push ecx
push 0Ch
call @ILT+80(operator new) (00401055)
add esp,8
mov dword ptr [ebp-28h],eax
mov dword ptr [ebp-4],0
cmp dword ptr [ebp-28h],0
je main+77h (004016d7)
push 3
push 2
push 1
mov ecx,dword ptr [ebp-28h]
call @ILT+555(Foo::Foo) (00401230)
mov dword ptr [ebp-44h],eax
jmp main+7Eh (004016de)
mov dword ptr [ebp-44h],0
mov edx,dword ptr [ebp-44h]
mov dword ptr [ebp-24h],edx
mov dword ptr [ebp-4],0FFFFFFFFh
mov eax,dword ptr [ebp-24h]
mov dword ptr [ebp-14h],eax