depuração versus tamanho dll liberação
Pergunta
Por que no CPP uma dll no modo de depuração é X10 maior do que liberação enquanto na Net são quase do mesmo tamanho?
Solução
programa para depurar um C ++ um monte de informação extra tem de ser mantido na DLL para que o depurador pode descobrir mais sobre o código em tempo de execução. C ++ não tem nenhum requisito de tempo de execução para ser capaz de inspecionar o código diferente de C # que permite a ampla inspeção de tempo de execução também conhecido como reflexão. Esta informação está lá em C # se utilizando de depuração ou modo de versão.
Adicionalmente C ++ compilado é geralmente directamente para o código de máquina no modo de libertação o objectivo do compilador é optimizado o código, tanto quanto possível, por exemplo. remover todo e qualquer informação estranha e código. Em C # os compila compilador para um código pseudo que é apenas a tempo compilado conforme necessário. Este código mantém muito do que é necessário para depuração independentemente se é de lançamento ou de depuração que você está construindo. Tanto é assim que é possível escrever um de-compilador para dar-lhe a volta código de um tempo de execução de montagem.
Outras dicas
Talvez porque na Net, que é o motor de tempo de execução que lidar com todas as verificações de depuração, enquanto que no CPP, todos os cheques são compilados em DLL.
.Net DLLs contêm metadados que a segurança runtime suporte reflexão, segurança de tipo e código de acesso. As únicas coisas que estão nos PDBs é variável nomes e números de linha local.
Onde como em C ++ metadados adicionais e às vezes não-ops precisa ser injetada para depuração apoio.
Você quer dizer C # .NET não. Também depende do seu projeto.
Eu tenho um C ++ / CLI DLL que é 54K no lançamento e 94K em depuração,
e outro que é 88KB na liberação e 124KB na depuração.
O meu C ++ / CLI EXE que inclui MFC é 471KB na liberação e 4446KB em debug!
E então meu C # DLL é 135KB, em ambos os de depuração e liberação.