2011-07-03 12 views
7

Estoy tratando de escribir mi primera aplicación 'demoscene' en MS Visual Studio Express 2010. De repente me di cuenta de que mi binario se expandió de 16kb a ~ 100kb en full- versión de lanzamiento optimizada para el tamaño. Mi tamaño objetivo es 64k. ¿Hay alguna manera de "buscar" el binario para averiguarlo, qué métodos consumen mucho espacio y cuáles debo volver a escribir? Realmente quiero saber en qué consiste mi binario.Cómo descubrir qué métodos aumentan el tamaño de 'exe'

Según lo que encontré en la web, VS2010 no es el mejor compilador para demoscenes, pero aún quiero entender lo que está sucediendo dentro de mi archivo .exe.

Respuesta

5

Creo que debería tener MSVC generar un archivo de mapa para usted. Este es un archivo que te dirá las direcciones de la mayoría de las diferentes funciones en tu ejecutable. La diferencia entre las direcciones consecutivas debería indicar cuánto espacio ocupa la función. Para generar un archivo de mapa, agregue la opción del vinculador /MAP. Para obtener más información, consulte: http://msdn.microsoft.com/en-us/library/k7xkk3e2(v=VS.100).aspx

+0

Muchas gracias, funcionó a la perfección. – Andrew

+0

Encontré una herramienta increíble para analizar archivos de mapas generados [enlace] (http://code.google.com/p/mapfile/). Puede ser que alguien lo encuentre útil también. – Andrew

+0

¡Genial! Me alegro de que esto funcione para ti. –

2

Puede quitar muchas cosas innecesarias del ejecutable y comprimirlo con utilidades como mew.

+0

Muchas gracias, voy a probar esta utilidad. – Andrew

0

Usa tu sistema de control de versiones para ver qué causó el aumento. En el futuro, identifico el tamaño del exe creado durante las compilaciones nocturnas. Y no olvide que puede optimizar el tamaño mínimo con la configuración del compilador.

2

he encontrado este útil para examinar tamaños ejecutables (aunque no para las cosas de tipo demoscene): http://aras-p.info/projSizer.html

Voy a decir esto: si está utilizando la biblioteca estándar en absoluto y luego se detiene de inmediato. Es un gran código de bloater. Por ejemplo, cada uso único std::sort agrega alrededor de 5KB y hay números similares para muchos de los contenedores estándar (por supuesto, depende de qué funciones use, pero en general agregan mucho código).

Además, no estoy en la escena de demostración, pero creo que la gente usa Crinkler para comprimir sus ejecutables.

+0

Parece que no funciona con pdbs de VS2010, pero gracias de todos modos. Si cambio a VS2008, este programa será de gran ayuda. – Andrew

Cuestiones relacionadas