gcc 5.3:
gives the assembly:
main: pushq %r12 movl $512, %edi pushq %rbp pushq %rbx call operator new[](unsigned long) ; <-- new (1) movl $64, %ecx movq %rax, %rbp xorl %eax, %eax movq %rbp, %rdi rep stosq movl $2048, %edi call operator new[](unsigned long) ; <<-- new (2) movl $2048, %edx xorl %esi, %esi movq %rax, %rdi movq %rax, %rbx call memset movq %rbp, %rdi call operator delete[](void*) ;<-- delete (1) movq %rbx, %rdi call emit(int*) movq %rbx, %rdi call operator delete[](void*) ;<-- delete (2) popq %rbx xorl %eax, %eax popq %rbp popq %r12 ret movq %rax, %r12 movq %rbp, %rbx .L3: movq %rbx, %rdi vzeroupper call operator delete[](void*) ;<-- handles a failed assignment movq %r12, %rdi call _Unwind_Resume movq %rax, %r12 jmp .L3
source share