2016-02-03 96 views
5

Czy naprawdę muszę zadbać o to, gdzie można emitować instrukcje .s? Czy może wpłynie to tylko na rozmiar, ale rzeczywisty wynik będzie taki sam? Wygenerowane dll będzie używane również na platformach. Czy wynikowa AOT-ed dll będzie taka sama dla IL z .s i bez?Czy krótkie instrukcje mają lepszą wydajność?

Znaczy br.s, ldloca.s, etc ..

+1

Proszę podać kod? Nie jest jasne, co masz na myśli, mówiąc o instrukcjach '.s'. – HimBromBeere

+4

@HimBromBeere - E.g. [beq] (https://msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.beq (v = vs.110) .aspx) kontra [beq.s] (https: // msdn.microsoft.com/en-us/library/system.reflection.emit.opcodes.beq_s(v=vs.110).aspx) –

+0

Uważam, że przyrostek .s ma tylko umożliwić kompresję IL, tj. kod pośredni. Może to potencjalnie zmniejszyć nieco czas pobierania, np. w rozwiązaniach internetowych. Nie wierzę, że ma to jakiś wpływ na renderowany kod maszynowy. –

Odpowiedz

1

To zależy. Głównym celem .s (i opcodes literalnych, takich jak ldc.i4.1) są tylko zmniejszenie rozmiaru kodu, a zaletą zmniejszenia wielkości metody jest umożliwienie wstawiania metody podczas generowania natywnego kodu z CIL z metoda wywołująca (limit dla jittera x86 to 32 bajty z IL). W takim przypadku krótkie instrukcje mogą zwiększyć wydajność aplikacji, jeśli są stosowane w metodzie inline-candidate.

W przeciwnym razie, ponieważ nie jest to wykonywany kod CIL, kod maszynowy generowany zarówno przez krótkie, jak i normalne kody opcyjne powinien być taki sam (a także, jeśli to możliwe, zoptymalizowany) natywnym kodem.

+1

Rozmiar MSIL nie ma nic wspólnego z tym, czy metoda będzie inline. Wpływa na to tylko rozmiar kodu maszynowego. –

+0

W jaki sposób zmniejszenie rozmiaru w bajtach metody umożliwia wstawienie metody? Myślałem, że może to zależeć od instrukcji IL ** ** count **, ale nie rozmiaru. – Vlad

+1

@HansPassant Zgodnie z artykułem [this] (http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx), "* Rozmiar inlinee jest ograniczony do 32 bajtów IL * ". To prawda, zależy to od JITtera, ale widziałem co najmniej trzy artykuły wspominające o tym ograniczeniu. Jak może wpłynąć na rozmiar kodu maszynowego, jeśli kod maszynowy dla metody inline i non-inlined mógłby być inny, ze względu na optymalizacje związane z ich parametrami? – IllidanS4