Pregunta

¿Por qué en cpp un dll en modo de depuración es X10 más grande que el lanzamiento mientras que en .Net son casi del mismo tamaño?

¿Fue útil?

Solución

Para depurar un programa C ++, se debe mantener mucha información adicional en la DLL para que el depurador pueda encontrar el código en tiempo de ejecución. C ++ no tiene ningún requisito de tiempo de ejecución para poder inspeccionar el código, a diferencia de C #, que permite una inspección exhaustiva en tiempo de ejecución también conocida como reflexión. Esta información está allí en C # ya sea que esté usando el modo de depuración o liberación.

Además, C ++ generalmente se compila directamente en el código de máquina en modo de lanzamiento, el objetivo del compilador es optimizar el código tanto como sea posible, por ejemplo. eliminar cualquier información y código extraños. En C #, el compilador compila a un pseudocódigo que se compila justo a tiempo según sea necesario. Este código conserva gran parte de lo que se requiere para la depuración, independientemente de si se está creando o depurando. Tanto es así que es posible escribir un descompilador para devolverle el código de un ensamblado en tiempo de ejecución.

Otros consejos

Quizás porque en .Net, es el motor de tiempo de ejecución el que maneja todas las comprobaciones de depuración, mientras que en CPP, todas las comprobaciones se compilan en la DLL.

Las DLL .Net contienen metadatos que admiten la reflexión en tiempo de ejecución, la seguridad de tipos y la seguridad de acceso al código. Las únicas cosas que están en los PDB son nombres de variables locales y números de línea.

Donde, como en C ++, se deben inyectar metadatos adicionales y, a veces, no operaciones para admitir la depuración.

Quieres decir C # no .NET. También depende de tu proyecto.

Tengo una DLL C ++ / CLI que es 54K en versión y 94K en depuración,
y otro que es 88 KB en lanzamiento y 124 KB en depuración.

¡Mi C ++ / CLI EXE que incluye MFC tiene 471 KB en versión y 4446 KB en depuración!

Y luego mi DLL de C # es de 135 KB tanto en depuración como en lanzamiento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top