Domanda

Perché in cpp una DLL in modalità debug è X10 più grande della versione mentre in .Net hanno quasi le stesse dimensioni?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top