dimensione di dll debug vs. release
Domanda
Perché in cpp una DLL in modalità debug è X10 più grande della versione mentre in .Net hanno quasi le stesse dimensioni?
Soluzione
Per eseguire il debug di un programma C ++ molte informazioni aggiuntive devono essere conservate nella DLL in modo che il debugger possa scoprire il codice in fase di esecuzione. C ++ non ha alcun requisito di runtime per poter ispezionare il codice a differenza di C # che consente un'ispezione di runtime estesa nota anche come riflessione. Questa informazione è disponibile in C # se si utilizza la modalità debug o di rilascio.
Inoltre il C ++ viene solitamente compilato direttamente sul codice macchina in modalità di rilascio, l'obiettivo del compilatore è ottimizzare il codice il più possibile, ad es. rimuovere qualsiasi informazione e codice estranei. In C # il compilatore si compila in uno pseudo codice che viene compilato appena in tempo come richiesto. Questo codice mantiene gran parte di ciò che è necessario per il debug, indipendentemente dal fatto che si stia creando o rilasciando. Tanto che è possibile scrivere un de-compilatore per restituire il codice da un assembly di runtime.
Altri suggerimenti
Forse perché in .Net è il motore di runtime che gestisce tutti i controlli di debug, mentre in CPP tutti i controlli vengono compilati nella DLL.
Le DLL .Net contengono metadati che supportano la riflessione del runtime, la sicurezza dei tipi e la sicurezza dell'accesso al codice. Le uniche cose presenti nei PDB sono i nomi delle variabili locali e i numeri di riga.
Dove, come in C ++, è necessario iniettare metadati aggiuntivi e talvolta no-op per supportare il debug.
Intendi C # non .NET. Inoltre dipende dal tuo progetto.
Ho una DLL C ++ / CLI che è 54K in versione e 94K in debug,
e un altro che è 88 KB in rilascio e 124 KB in debug.
Il mio EXE C ++ / CLI che include MFC è 471 KB in versione e 4446 KB in debug!
E quindi la mia DLL C # è di 135 KB sia in debug che in versione.