有如下代码(红色对应汇编):
int main()
{
char *a=new char(4);
0000000 push ebp
00000001 mov ebp,esp
00000003 sub esp,8
00000006 push edi
00000007 push esi
00000008 push ebx
00000009 xor edi,edi
0000000b xor ebx,ebx
0000000d mov ecx,1
00000012 call dword ptr ds:[00B45C88h]
00000018 mov esi,eax
0000001a mov edi,esi
0000001c test edi,edi
0000001e je 00000027
00000020 mov byte ptr [edi],4
00000023 mov esi,edi
00000025 jmp 00000029
00000027 xor esi,esi
00000029 mov ebx,esi
delete(a);
0000002b mov ecx,ebx
0000002d call dword ptr ds:[00B45C84h]
00000033 xor esi,esi
}
00000035 mov eax,esi
00000037 pop ebx
00000038 pop esi
00000039 pop edi
0000003a mov esp,ebp
0000003c pop ebp
0000003d ret
问题是delete如何知道该释放几个字节的内存,我们给它的只是一个 void * 型指针。