Y a-t-il un moyen de générer du code de montage du code C #? Je sais que cela est possible avec C code C avec du gaz, mais quelqu'un sait-il s'il est possible avec C #? P>
4 Réponses :
c # est normalement compilé au bytecode .Net (appelé CIL ou MSIL ), puis < un href = "http://fr.wikipedia.org/wiki/just-in-time_compilation" rel = "nofollow"> JIT ("juste dans le temps") compilé au code natif lorsque le programme est réellement exécuté . Il existe des compilateurs à l'avance pour C # comme AOT de Mono , afin que vous puissiez compiler un programme C # à travers un de ceux-ci puis le désassembler. Le résultat est susceptible d'être très difficile à suivre. P>
Plus probablement, vous voudrez peut-être examiner les bytecodes qui sont un peu plus haut que le code de l'Assemblée de la CPU, que vous pouvez faire en utilisant ildasme sur un compilé code> d'un programme C #. p>
C # Code compile dans MSIL (langue intermédiaire MS) qui n'est en fait pas vraiment code ASM que vous obtenez du compilateur C. En savoir plus sur la manière dont .NET Framework applications exécutées. P>
Si vous voulez regarder le code IL généré, voir Question . P>
Vous pouvez utiliser Benchmarkdototnet avec le drapeau de l'impression défini sur true.
[DisassemblyDiagnoser(printAsm: true, printSource: true)] // !!! use the new diagnoser!! [RyuJitX64Job] public class Simple { int[] field = Enumerable.Range(0, 100).ToArray(); [Benchmark] public int SumLocal() { var local = field; // we use local variable that points to the field int sum = 0; for (int i = 0; i < local.Length; i++) sum += local[i]; return sum; } [Benchmark] public int SumField() { int sum = 0; for (int i = 0; i < field.Length; i++) sum += field[i]; return sum; } }
Je ne suis pas clair ce que vous demandez. Voulez-vous compiler votre C # à assembler ou souhaitez-vous écrire un programme C # qui génère l'assemblage?
Je veux voir comment mon code C # ressemble à l'assemblage. À des fins éducatives. Prendre une classe d'assemblage en ce moment.