2016-02-03 21 views
5

Devo davvero preoccuparmi di dove è possibile emettere le istruzioni .s? Oppure influenzerà solo le dimensioni, ma le prestazioni reali saranno le stesse?Le istruzioni brevi hanno prestazioni migliori?

La DLL generata verrà utilizzata anche sulle piattaforme AOT. La DOT AOT-ed risultante sarà la stessa per IL con .s e senza?

intendo br.s, ldloca.s, ecc ..

+1

Si prega di condividere un codice? Non è chiaro cosa intendi con le istruzioni di ".s'. – HimBromBeere

+4

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

+0

Credo che il suffisso .s sia solo per consentire la compressione dell'IL, cioè il codice intermedio. Questo può potenzialmente ridurre un po 'i tempi di download, ad es. nelle soluzioni web. Non credo che abbia alcun effetto sul codice macchina renderizzato. –

risposta

1

dipende. Lo scopo principale di .s (e gli opcode di tipo letterale come ldc.i4.1) sono solo quelli di ridurre la dimensione del codice, e il vantaggio di ridurre la dimensione di un metodo è di rendere possibile l'allineamento del metodo durante la generazione del codice nativo da CIL di il metodo di chiamata (il limite per x86 jitter è 32 byte di IL). In questo caso, brevi istruzioni possono aumentare le prestazioni dell'applicazione, se vengono utilizzate in un metodo candidato in linea.

Altrimenti, poiché non è il CIL che viene eseguito, il codice macchina generato da entrambi gli opcode corti e normali dovrebbe essere lo stesso (e anche ottimizzato, quando possibile) codice nativo.

+1

La dimensione dell'MSIL non ha nulla a che fare con il metodo in cui un metodo sarà in linea. Solo le dimensioni del codice macchina lo influenzano. –

+0

In che modo ridurre la dimensione in byte di un metodo rende possibile l'allineamento del metodo? Ho pensato che potrebbe dipendere dalle istruzioni di IL ** conteggio ** ma non le dimensioni. – Vlad

+1

@HansPassant Secondo [questo] (http://blogs.msdn.com/b/davidnotario/archive/2004/11/01/250398.aspx) articolo, "* La dimensione di inlinee è limitata a 32 byte di IL * ". È vero che dipende da JITter, ma ho visto almeno tre articoli menzionare questa limitazione. Inoltre, come può influire la dimensione del codice macchina, se il codice macchina per il metodo in linea e non in linea potrebbe essere diverso, a causa delle ottimizzazioni relative ai loro parametri? – IllidanS4

Problemi correlati