Inace, ne znam gde si to video sem u debug modu (a to se ne racuna jer je optimizacija iskljucena zbog line-by-line debuga)
U release bildu posle JITovanja kod je skoro potpuno identican, razlika moze da bude samo u redosledu dodela. U primeru koji sam upravo uradio cek je i kompletan metod inline-ovan u pozivaoca pa je jos lakse uporediti. Bottom line, da li ce biti conditional move ili je/jne branching zavisi od sr/dest kombinacije ali ako ?: operator JITuje u conditional move onda postoji i ekvivalentan if/then/else konstrukt koji ce uraditi to isto.
public class Class1
{
public int x;
public int y = 123;
public void IfWay()
{
if (x == 0) x = 10; else x = y;
}
public void CondWay()
{
x = x == 0 ? 10 : y;
}
}
Class1 c = new Class1();
00000000 push ebp
00000001 mov ebp,esp
00000003 mov ecx,5B25E0h
00000008 call FFD2FBE0
0000000d mov edx,eax
0000000f mov dword ptr [edx+8],7Bh
c.x = 0;
00000016 xor ecx,ecx
00000018 mov dword ptr [edx+4],ecx
c.IfWay();
0000001d cmp dword ptr [edx+8],0Fh
00000021 jne 0000002A
00000023 xor ecx,ecx
00000025 mov dword ptr [edx+4],ecx
00000028 jmp 00000030
0000002a mov eax,dword ptr [edx+8]
0000002d mov dword ptr [edx+4],eax
c.CondWay();
00000030 cmp dword ptr [edx+8],0Fh
00000034 je 0000003B
00000036 mov eax,dword ptr [edx+8]
00000039 jmp 0000003D
0000003b xor eax,eax
0000003d mov dword ptr [edx+4],eax
00000040 pop ebp
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić