Qual è la differenza tra codice non sicuro e codice non gestito in C#?Qual è la differenza tra codice non sicuro e codice non gestito in C#?
risposta
Il codice gestito viene eseguito sotto la supervisione del CLR (Common Language Runtime). Questo è responsabile per cose come la gestione della memoria e la garbage collection.
Quindi unmanaged funziona semplicemente al di fuori del contesto del CLR. non sicuro è una specie di "in mezzo" gestito e non gestito. non sicuro funziona ancora sotto CLR, ma ti permetterà di accedere alla memoria direttamente attraverso i puntatori.
Un codice non sicuro in C# consente l'uso di puntatori. Nel contesto di CLR, non vi è alcun codice non gestito in C#.
ho sempre capito codice 'gestito' come codice che non esegue nel contesto del CLR ... Fondamentalmente come chiamate a DLL e come C/C++. –
Sono assolutamente d'accordo. Non sarai P/Invocando comunque DLL C#, solo C/C++ come hai detto. –
Unsafe - codice che può essere al di fuori del sottoinsieme verificabile di MSIL
non gestito - Il codice che non è gestito dal runtime e non è quindi visibile al GC (ad esempio una funzione di x 86 compilato nativo sarebbe gestito .)
si utilizza qualcosa come pinvoke per eseguire il codice non gestito in .net – Hal
Sì, ma è anche possibile definire funzioni esterne con attributi DLLImport da portare e collegare a DLL native; una classe di handle di funzioni extern può essere utilizzata come "wrapper" gestito per il codice nativo. – KeithS
codice unsafe viene eseguito all'interno del CLR mentre il codice non-gestito corre fuori del CLR.
Un esempio di codice non sicuro sarebbe:
unsafe class MyClass
{
private int * intPtr;
}
È possibile utilizzare i puntatori ovunque in questa classe.
Un esempio di codice non gestito è:
class MyClass
{
[DllImport("someUnmanagedDll.dll")]
static extern int UnManagedCodeMethod(string msg, string title);
public static void Main()
{
UnManagedCodeMethod("calling unmanaged code", "hi");
}
}
Non è necessariamente il codice non gestito in sé, ma chiamandolo.
Ecco cosa si può fare all'interno di un contesto non sicuro.
http://msdn.microsoft.com/en-us/library/aa664769%28v=VS.71%29.aspx
- 1. Differenza tra codice nativo e codice gestito?
- 2. Qual è la differenza tra C++ gestito e C#?
- 3. Qual è la differenza in Swift tra "non proprietario (sicuro)" e "non proprietario (non sicuro)"?
- 4. Codice non sicuro in C#
- 5. Qual è la differenza tra `{}` e `()` in questo codice?
- 6. esegue il debug del codice C++ gestito e del codice C++ non gestito in una soluzione
- 7. Come utilizzare il codice gestito dal codice non gestito?
- 8. Utilizzo del codice non gestito dal codice gestito
- 9. Prestazioni di richiamo del codice non gestito dal codice gestito
- 10. durante la chiamata di codice non gestito dal codice gestito in Windows 7
- 11. Analisi metrica codice per codice C++ non gestito
- 12. Chiamare una dll C++ (codice non gestito) da un servizio Windows C# (scritto nel codice gestito)
- 13. Qual è la differenza tra chiamare LayoutInflater direttamente e non?
- 14. Qual è la differenza tra le direttive di codice e blocco di codice in ReST?
- 15. C & C++: Qual è la differenza tra pointer-to e address-of array? codice
- 16. C'è qualche differenza tra null e 0 quando si assegnano a puntatori in codice non sicuro?
- 17. Qual è la differenza tra memset e memcpy in C
- 18. Qual è la differenza tra popen() e system() in C
- 19. comunicazione a due vie tra codice non gestito e codice unity3d
- 20. Utilizzare le proprietà C# nel codice C++ non gestito
- 21. Qual è la differenza tra variabili firmate e non firmate?
- 22. Qual è la differenza tra codice di compilazione e codice eseguibile?
- 23. Qual è la differenza tra questi due esempi di codice?
- 24. Il codice gestito dovrebbe restituire un errore o generare eccezioni al codice non gestito?
- 25. Qual è la differenza tra Verilog! e ~?
- 26. Qual è la differenza tra = e: =
- 27. Qual è la differenza tra strtok_r e strtok_s in C?
- 28. Qual è la differenza tra oggetti e classi in C#?
- 29. Qual è la differenza tra Delegate e Azione in C#
- 30. Debug del codice non gestito durante il debug del codice gestito
@NullUserExceptin: grazie, è davvero utile per me – ashish
Cosa intendi per "contesto"? Con C++/CLI, puoi unire codice gestito e non gestito (nativo) in un unico assieme, in un unico processo. – Niki
Un assembly C++/CLI compilato con l'opzione/clr: safe (modalità sicura) garantisce che il codice IL prodotto è verificabile e digita sicuro. In sostanza, l'assembly sicuro non può contenere alcuna funzionalità che potrebbe appartenere al blocco C# non sicuro, come l'aritmetica del puntatore. Per utilizzare tale funzionalità, è necessario compilare in modalità pura con/clr: pure (l'assembly in modalità pura è interamente IL, ma potrebbe collegarsi a dll nativi, il collegamento statico con DLL native in modalità pura non è possibile?) O in modalità mista/clr (che non può solo collegarsi al codice nativo ma incorporarlo nell'assemblaggio prodotto). – Protongun