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
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ć