Мой навык разборки .Net может быть слабым, но вот что я получаю, выделяя два разных объекта:
{
00000022 nop
new Object();
00000023 mov ecx,79B9F5E8h
00000028 call FD95FB90
0000002d mov dword ptr [ebp-3Ch],eax
00000030 mov ecx,dword ptr [ebp-3Ch]
00000033 call 76AF49F0
00000038 nop
}
00000039 nop
{
0000003a nop
new StringBuilder();
0000003b mov ecx,79B9FB78h
00000040 call FD95FB90
00000045 mov dword ptr [ebp-40h],eax
00000048 mov ecx,dword ptr [ebp-40h]
0000004b call 76ACF938
00000050 nop
}
То, как я интерпретирую это, заключается в том, что «new X ()» оценивается как два отдельныхзвонки.Первым может быть «выделение памяти», а вторым вызовом является конструктор объекта.Я говорю это потому, что первый метод, вызываемый обоими операторами, один и тот же (даже если они разных типов), а второй вызов в каждом случае различен.
Если кто-то знает, как проверить, что оценивают эти конкретные адресак, я бы хотел знать.