Muy buenas,
estoy comprobando temas de memoria de una forma un tanto cutre, pero que no veo pq no me tendria que funcionar.
Estoy poniendo un breakpoint en mi programa, lo ejecuto en modo debug y le echo un ojo a la memoria que ocupa el proceso en el administrador de tareas. Pues bien, cada vez que lo ejecuto me da un valor diferente, no muy diferente pero lo justo para no fiarme mucho.
El tema es que estoy mirando si libero correctamente toda la memoria de un objeto y me da valores un poco diferentes antes de la creación y después de la destrucción, con lo que no sé si es culpa mia o culpa del administrador de tareas.
Conoceis algún programa/método que realice buenas medidas de la memoria ocupada?
Merci!
VinCenT
si usas el visual c++ o .net puedes activar el modo debug para ver las perdidas de memoria (memory leaks) de esta manera:
#define CRTDBG_MAP_ALLOC
#include
#include
y al final del app cuando sepas seguro que has destruido todos los objetos que conoces tienes que llamar a esta funcion:
_CrtDumpMemoryLeaks();
segun el msdn es importante incluir #include antes que el otro, aunque yo lo he probado y no pasa nada en un .net por si las moscas y cosas extrañas entre compiladores ponlo en ese orden
saludos
Echale un vistazo al manager de memoria de Paul Nettle. Yo no lo he utilizado pero por lo que he leído está muy bien. Lo puedes encontrar en la sección "source code" de
Fluid Studios.
Te pongo la descripción:
CitarMemory Manager (a.k.a. "MMGR")
MMGR is an industrial-strength memory manager for almost any project.
Not only will MMGR probably point out some bugs you never knew you had, but it is also a great development tool. Among other standard tracking tools (overruns/underruns, deallocation mismatches, etc.), MMGR also provides a rich featureset of developer tools. For example, it allows you to set a breakpoint on an arbitrary allocation, generate a snapshot report of memory currently in use, etc. You can even ask MMGR to track how much of your allocated RAM is actually in use (nothing worse than allocating 64MB of memory just to find that you only needed 2K. :)
Saludos.
CitarSoftware comercial:
- Compuware DevPartner Studio, suite de depuración y optimización para Microsoft Visual Studio 6.0 y .NET. Abarca todos los lenguajes de Visual Studio e incluye una herramienta para control y optimización de código fuente bajo Visual Basic .NET y Visual C#. http://www.compuware.com/products/devpartn...tner/studio.htm
- Rational Purify, producto de IBM muy similar al anterior. Tiene versiones para Windows(Visual Studio .NET), Linux y Unix. al contrario que DevPartner Studio, Purify no instrumenta el código fuente(sólo Windows y Unix), haciendo posible la depuración de programas sin código fuente disponible. No necesita una máquina tan potente como DevPartner studio. http://www.rational.com/products/pqc/index.jsp
- Intel VTune, suite de optimización con versiones Windows(Visual Studio .NET) y Linux. Recoge multitud de datos acerca de la ejecución de nuestros programas, y permite usarlo tambien de forma remota. http://www.intel.com/software/products/vtune/
Software libre:
- Gcov, Gprof, Memprof, herramientas para realizar tests de cobertura, optimización y detección de errores de memoria, respectivamente.
GNU Cov: http://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_8.html
GNU Prof: http://www.gnu.org/manual/gprof-2.9.1/gprof.html
Memprof: http://www.gnome.org/projects/memprof/
- Electric Fence, herramienta pasiva que detecta errores relacionados con la memoria, como acceso fuera de rango a arrays, etc. No requiere tocar el código de la aplicación, ya que se introduce en tiempo de enlazado. http://perens.com/FreeSoftware/
A mí me gusta mucho el DevPartner :).. aunque ahora mismo con el tema de móviles no lo uso. Busca alguna demo o versión de evaluación.
Muchisimas gracias a todos!
Y ya que estamos.... al finalizar mi aplicación me da errores de directx que no libero memoria de alguno de sus objetos. Hay manera de saber quales son? (pq yo diria que los libero todos... )
Gracias!
VinCenT