Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al C# - Codice Unsafe Unmanaged

Guida al C#

Capitolo 19° - Codice Unsafe Unmanaged

<< Precedente Prossimo >>

 

 

Cosa indica il Termine Unsafe?

L'unsafe e una parte di codice di cui viene compilata escludendo il Grabage Collection,
Evitando la Compilazione IL (Intermediate Languague)
Passando direttamente per JIT (Just in Time)

Qual'è la differenza tra questi due metodi di compilazione?

Usando il Grabage Collection, con compilazione eseguita da IL abbiamo i nostri programmi quotidiani
scritti in .net

Usando metodi Unsafe possiamo appunto escludere il codice gestito e passare al codice Un-managed
potendo usare Puntatori e a blocchi di memoria non gestiti usando frammenti di codici c++ e C#

 

Vantanggi: 
Compilazione ultra veloce, saltando il compilatore IL
passando direttamente per JIT

Svantaggi:
Usare codice unmanaged può essere anche pericoloso.
Se usato in maniera errata, può causare anche il Dead Blue Screen di Windows

 

piccolo esempio di come usare unsafe in una funzione

 

 

unsafe
            {

                int* j;

                int k = 0;

                int* idk = &k + 100 / 2;

                j = idk;
            }

 

oppure

 

 

public unsafe void Prova {
      char* arrayPtr;
      fixed(int* ptr=&obj.aValueMember) {
        arrayPtr=(char*)(*(ptr-1));                                         
                                                                                                                                                 
        arrayPtr[6]='D';         
                                      
        arrayPtr[7] ='E';
        arrayPtr[8] ='F';
        arrayPtr[9] ='A';
        arrayPtr[10]='U';
        arrayPtr[11]='L';
        arrayPtr[12]='T';
      }

    }
 

 

Possiamo in'oltre dichiarare anche funzioni o metodi come puntatori esempio
public unsafe void* test() { .... } 

 

<< Precedente Prossimo >>
A proposito dell'autore

VB.NET, C#, C++, PHP, MySQL, Javascript , LUA,Infarinatura di Python e Ruby, Grafica Vettoriale (Esperto di CorelDraw) DirectX 9 e XNA Game Studio, Silverlight, jquery, Autoit e Android. Esperto in Unity e Buona conoscenza di Blender. Esperto C# UI Designer Ottima conoscenza sulle tecnologie PBR. Assembly? Sto imparando...