Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

if true, if false

E' interessante notare che il compilatore Visual C# genera per gli snippet a sinistra lo stesso codice IL degli snippet a destra:

class Foo
{
  static void DoSomething()
  {
    if (true) {}
  }
}
class Foo
{
  static void DoSomething() {}
}
class Foo
{
  static void DoSomething()
  {
    if (false) {}
  }
}
class Foo
{
  static void DoSomething()
  {
    goto here;
    here:;
  }
}

Quando l'espressione booleana è sempre true, il compilatore sostituisce l'if con il ramo then, mentre quando l'espressione booleana è sempre false, il compilatore sostituisce l'if con un salto incondizionato al ramo else. Nel primo caso si genera solo il codice per il ramo then, mentre nel secondo caso solo il codice per il ramo else.

Il compilatore Visual Basic .NET invece, genera lo stesso schema di codice per If True e If False, generando un salto condizionato al ramo Then, respettivamente al ramo Else, in base a un valore intero inserito prima nello stack (il valore diverso da 0, inserisce 1, rispettivamente uguale a 0, inserisce 0). Quindi il compilatore Visual Basic .NET non ottimizza l'If in base alla sua espressione booleana, generando sempre codice per tutti e due i rami, Then e Else.

La frase del giorno:

"Sarà certamente pieno di polvere il mio solaio, ma conserva una cosa di cui non vorrei liberarmi: la ruota della bicicletta con cui mio marito Ettore di notte andava a lavorare"
- Alda Merini

Print | posted on domenica 17 aprile 2005 19:47 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET