tl; dr: Perché dovrei scegliere di scrivere / compilare codice 1 non gestito
non gestitoSupponiamo che sto iniziando un nuovo progetto. Ho deciso di scrivere in un linguaggio simile a C, probabilmente uno di C, C ++, C # o Java. C # e Java sono gestiti (beh, Java viene eseguito nella JVM, ma si assume che sia la stessa cosa). I plugin GCC gestiti esistono (sebbene non ne abbia mai usato nessuno, quindi non so se sono utili). Il codice gestito ha molti vantaggi:
- Non devi preoccuparti della raccolta dei rifiuti esplicita (che è poco pratica)
- È molto più difficile perdere la memoria
- È banale da implementare - basta scegliere la lingua corretta o i giusti flag del compilatore
- es. usa C # o usa MCP per GCC
- Migliore interoperabilità se si sta eseguendo la compilazione in IL
- Digitare sicurezza, controllo della matrice e dell'indicizzazione ecc.
Secondo me (che potrebbe essere sbagliato - e sto cercando di capire perché è sbagliato) è meglio usare quasi sempre il codice gestito. Esistono tuttavia linguaggi non gestiti e le lingue gestite hanno contrassegni non gestiti, pertanto è necessario scegliere alcuni motivi per il codice gestito. Quali sono i motivi?
Modifica: come indicato da Deduplicator, è possibile utilizzare un GC in codice non gestito (di terze parti o creato dall'utente). Questo porta a un'altra domanda correlata: tutti coloro che compilano codice C / C ++ nativo usano un GC? In caso contrario, quali sono i vantaggi per non utilizzare un GC?
1. Ai fini di questa domanda, sto prendendo in prestito la definizione di "Gestione" di John Bode (sotto) - qualsiasi cosa venga eseguita in una macchina virtuale, non solo la definizione Microsoft del codice gestito. Conosco Java come linguaggio "gestito" in quanto viene eseguito in una VM.