Libro "VB 2010 spiegato a mia nonna" (29)

Esempio di codice MSIL

Vediamo che aspetto ha il codice intermedio prodotto da due semplici programmi per Console: il primo nell’ambito di una soluzione Visual Basic e il secondo per C#. Innanzitutto creiamo le due soluzioni, selezionando come tipo di progetto una Applicazione Console (Console Application). I codici sorgente sono rispettivamente i seguenti:

‘ Esempio: 02.01 – VB 2010

Module Module1

  Sub Main()

    Console.WriteLine(“Prova”)

    Console.ReadLine()

  End Sub

End Module

 

‘ Esempio 02.02 – C# 2010

using System;

namespace ConsoleApplication2

{

  class Program

  {

    static void Main(string[] args)

    {

      Console.WriteLine(“Prova”);

      Console.ReadLine();

    }

  }

}

I due programmi non fanno altro che aprire una finestra “Prompt dei comandi” (fondamentalmente equivalente alla finestra MS-DoS), visualizzare la stringa “Prova” e poi attendere la pressione di un tasto qualsiasi.

Dopo aver compilato i due programmi, proviamo ad avviare lo strumento dedicato all’ispezione del codice MSIL, cioè “IL Disassembler” ovvero “IL DASM” (è necessario avere installato anche l’SDK, cioè il Software Development Kit, di Visual Studio 2010).

Nota – L’operazione denominata compilazione è necessaria per tradurre il codice sorgente in codice eseguibile, o per dire in modo tecnicamente più corretto in ambito .neT, in codice intermedio (MSIl).

Il codice intermedio relativo all’eseguibile in Visual Basic 2010 è il seguente:

.method public static void Main() cil managed

{

.entrypoint

.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01

00 00 00 )

// Code size 17 (0x11)

.maxstack 8

IL_0000: ldstr “Prova”

IL_0005: call void [mscorlib]System.Console::WriteLine(string)

IL_000a: call string [mscorlib]System.Console::ReadLine()

IL_000f: pop

IL_0010: ret

} // end of method Module1::Main

 

Invece, il codice intermedio relativo all’eseguibile in C# 2010 è il seguente:

.method private hidebysig static void Main(string[] args) cil managed

{

.entrypoint

// Code size 17 (0x11)

.maxstack 8

IL_0000: ldstr “Prova”

IL_0005: call void [mscorlib]System.Console::WriteLine(string)

IL_000a: call string [mscorlib]System.Console::ReadLine()

IL_000f: pop

IL_0010: ret

} // end of method Program::Main

Come potete vedere non ci sono grandi differenze e, anzi, il codice relativo al metodo Main è identico.

un altro aspetto evidente, esaminando il codice IL, è l’uso del tipo di dato String. Il, come qualsiasi altro linguaggio, utilizza delle variabili di memoria per conservare valori e riferimenti durante l’esecuzione:

✥ un valore memorizzato in una variabile permette di mantenere direttamente un dato semplice (una stringa, un valore numerico intero, un valore numerico a virgola mobile ecc.);

✥ un riferimento memorizzato in una variabile, invece, consente di mantenere l’indirizzo al quale potrà essere trovato l’oggetto. In pratica, un riferimento è una sorta di puntatore a un oggetto, definito in modo implicito.

Nota – nel linguaggio VB.NET non è possibile utilizzare direttamente un puntatore, né manipolarlo come invece è possibile fare in C++ e solamente in blocchi fissi di codice del linguaggio C#.

C’è una differenza anche nel modo in cui sono memorizzate le istanze di riferimenti e i tipi valore:

✥ le istanze di riferimenti vengono memorizzate nella memoria heap gestita (managed heap) ;

✥ i tipi valore vengono memorizzati solitamente nello stack, tranne quando sono dei campi facenti parte di un oggetto, in tal caso anche questi valori si trovano nella managed heap.

(…segue…)

Fonte: Cap. 3 – libro “Visual Basic 2010 spiegato a mia nonna”, Edizioni FAG Milano, Autore Mario De Ghetto, 2011, http://bit.ly/NRO6Cn.

About these ads

Pubblicato il 11 agosto 2012, in Programmazione, VB2010SAMN, VS 2010 con tag , , , , . Aggiungi il permalink ai segnalibri. Lascia un commento.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 843 follower

%d blogger cliccano Mi Piace per questo: