Agosto 23, 2017, 09:25:22 pm

Autor Tema: Mi aplicación no deja de subir el uso de memoria  (Leído 4636 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Solid Water

  • Yo vivo en CPH
  • ***
  • Mensajes: 1032
  • Sexo: Masculino
  • CPH 4 ever
    • Ver Perfil
Mi aplicación no deja de subir el uso de memoria
« en: Febrero 11, 2017, 03:44:19 pm »
Tengo una aplicación muy grande en C++ (Un video juego al que entran algunos player)
Ésta cuando presiono alt+control+supr, no deja de subir el uso de memoria.
Quería saber si se supone que ésto es por que no tiene todos los delete correspondientes a los new class.
Podría de alguna forma saber que clases son las que no se están borrando?

Muchas gracias.
« Última modificación: Febrero 11, 2017, 03:56:56 pm por Solid Water »
I've been alone all along

Desconectado jep

  • Night Elf Druid
  • Colaborador
  • ****
  • Mensajes: 1763
  • Sexo: Masculino
  • Avatar by 5475UK1
    • Ver Perfil
Re:Mi aplicación no deja de subir el uso de memoria
« Respuesta #1 en: Febrero 11, 2017, 04:06:49 pm »
Uno de los problemas más comunes y dificiles de solucinar son las fugas de memoria.

una buena idea es usar siempre smart pointers

hay herramientas para buscar las fugas.
esta es una You are not allowed to view links. Register or Login
Entiendo que funciona con C y con C++

Saludos Solid!

Desconectado Solid Water

  • Yo vivo en CPH
  • ***
  • Mensajes: 1032
  • Sexo: Masculino
  • CPH 4 ever
    • Ver Perfil
Re:Mi aplicación no deja de subir el uso de memoria
« Respuesta #2 en: Febrero 11, 2017, 04:16:28 pm »
Gracias jep !!!

Desconectado Solid Water

  • Yo vivo en CPH
  • ***
  • Mensajes: 1032
  • Sexo: Masculino
  • CPH 4 ever
    • Ver Perfil
Re:Mi aplicación no deja de subir el uso de memoria
« Respuesta #3 en: Febrero 11, 2017, 07:43:28 pm »
Quería comentar que tratando de zafar de éste problema intenté parchearlo convirtiendo mi proyecto C++ a C++.net (el cual supuesta mente tiene garbage collection), pero el resultado de la memoria fue aún peor.
Seguiré investigando la solución de jep.

Saludos.
« Última modificación: Febrero 11, 2017, 07:51:13 pm por Solid Water »

Desconectado OnTheCore

  • Si te metes con CPH
    te metes conmigo
  • ****
  • Mensajes: 1610
  • Sexo: Masculino
    • Ver Perfil
Re:Mi aplicación no deja de subir el uso de memoria
« Respuesta #4 en: Febrero 13, 2017, 03:40:13 pm »
Seguro es un memory leak como dijo jep. Fijate con un debugger que en alguna parte estas reservando memoria de mas o no la estas liberando. Cuidado con los bucles.
No me mandes mensajes privados sobre troyanitos,  "crypters" o alguna otra boludez. No voy a ser tu maestro personal ni te voy a vender un curso para ser hacker. Si me envias un mensaje asi, probablemente no te guste la respuesta.

Desconectado tzikitxo

  • Me das tu IP?
  • *
  • Mensajes: 9
  • Sexo: Masculino
    • Ver Perfil
Re:Mi aplicación no deja de subir el uso de memoria
« Respuesta #5 en: Abril 16, 2017, 07:46:10 am »
Buenas, Como ya te han comentado lo que tienes son unos leaks como una catedral, si esta compilando con g++ te recomiendo pasar el valgrim (si estas en linux) o el dr.memory (si estas en windows) tardaran un rato en analizarlo , y mas si tienes varios threads, pero te diran en que instancias tienes los leaks. Otro metodo, bastante mas eficaz y rapido para mi gusto, es tener tu propio gestor de memoria, aunque no sea mas que un wrapper sobre new/delete de c++, pero te permitira llevar un control de los news y deletes que haces, y desde que funciones.

Esto seria un ejemplo muy basico, solo tendria en cuenta la cantidad de new y deletes que se han hecho y cuanta memoria tienes en uso. Una manera de hacer esta clase mas potente y util, seria añadiendo un RTTI a todas tus clases, para poder detectar que instancias son las que causan esos leaks.
Código: You are not allowed to view links. Register or Login
namespace memory
{
//! Class to hold the memory data statistics.
class MemData
{
static int mMemInUse{0};
static int mMaxMemInUse{0};
static int mAllocs{0};
static int mDealllocs{0};
}

template <typename T, typename .. Ts>
static T* New(Ts... ts)
{
// Actualizamos el valor de la cantidad de memoria que tenemos.
MemData::mMemInUse += sizeof(T);
                MemData::mAllocs++;

// Comprobamos si ha superado el maximo, si es asi, la actualizamos.
if(MemData::mMaxMemInUse < MemData::mMemInUse)
MemData::mMaxMemInUse = MemData::mMemInUse;

               return ::new T(ts);
}
       
          template <typename T>
static void Delete(T* p)
         {
               MemData::mMemInUse -= sizeof(T);
               MemData::mDeallocs++;

             ::delete(p);
          }
} // !memory
« Última modificación: Abril 16, 2017, 07:53:36 am por tzikitxo »
RAAAAAAAAMMSTEIN!!!!!! :cool
You are not allowed to view links. Register or Login

Desconectado Solid Water

  • Yo vivo en CPH
  • ***
  • Mensajes: 1032
  • Sexo: Masculino
  • CPH 4 ever
    • Ver Perfil
Re:Mi aplicación no deja de subir el uso de memoria
« Respuesta #6 en: Abril 17, 2017, 05:00:33 pm »
Es muy interesante, gracias.
De momento tengo el proyecto frenado por otras razones, pero si en algún momento lo retomo, seguro pasaré por este hilo.

Saludos.

Desconectado Solid Water

  • Yo vivo en CPH
  • ***
  • Mensajes: 1032
  • Sexo: Masculino
  • CPH 4 ever
    • Ver Perfil
Re:Mi aplicación no deja de subir el uso de memoria
« Respuesta #7 en: Junio 26, 2017, 04:04:06 pm »

Hola basándome en lo tuyo tengo el siguiente código:

Game.cpp
Código: You are not allowed to view links. Register or Login
       //MEMORY LEAKS 2017

int mMemInUse = 0;
int mMaxMemInUse = 0;
int mAllocs = 0;
int mDealllocs = 0;


template <typename T>
static T* New(T)
{
// Actualizamos el valor de la cantidad de memoria que tenemos.
       mMemInUse += sizeof(T);
               mAllocs++;

// Comprobamos si ha superado el maximo, si es asi, la actualizamos.
if(mMaxMemInUse < mMemInUse)
    mMaxMemInUse = mMemInUse;

               return ::new T(ts);
}
       
         template <typename T>
static void Delete(T* p)
         {
               mMemInUse -= sizeof(T);
               mDeallocs++;

             ::delete(p);
          }


Pero cuando lo muestro por pantalla:

Wmain.cpp
Código: (c++) You are not allowed to view links. Register or Login
                char cTxt[40] ;
        ZeroMemory(G_cTxt, sizeof(G_cTxt));
            wsprintf(cTxt, "Mem in use: %d", mMemInUse);
                TextOut(hdc, 560, 80, cTxt, strlen(cTxt));
ZeroMemory(G_cTxt, sizeof(G_cTxt));
wsprintf(cTxt, "MaxMemInUse: %d", mMaxMemInUse);
TextOut(hdc, 560, 95, cTxt, strlen(cTxt));
ZeroMemory(G_cTxt, sizeof(G_cTxt));
wsprintf(cTxt, "delAllocs: %d", mDealllocs);
TextOut(hdc, 560, 110, cTxt, strlen(cTxt));

Las 3 variables que muestro (mMemIn_Use, mMaxMemInUse y mDeallocs) me salen con el valor: -842150451   
Alguien sabe que puedo estar haciendo mal??
será por el scope?

Gracias !!

Edit: Probé declararlos como static int en el Game.h y ahora me aparecen en 0 las 3 a pesar de los new  y deletes por qué será?? También queria comentar que el visual C++ 6.0 me tira error al usar los puntos suspensivos ...

Edit2: Trate de cambiar algunos delete por Delete(objeto) pero me tira errores

« Última modificación: Junio 27, 2017, 08:15:14 pm por Solid Water »


resuelto
Liberar memoria si se cierra aplicación.

Iniciado por Binary_Death

7 Respuestas
1510 Vistas
Último mensaje Mayo 29, 2011, 04:27:30 pm
por SEKTOR
xx
¿Que ruta guardo, al subir img al server, en cliente(aplicacion java)?

Iniciado por zaic0

5 Respuestas
3166 Vistas
Último mensaje ſeptiembre 10, 2009, 05:57:49 pm
por zaic0
xx
"Como subir archivos al servidor en java(no aplicacion web)"

Iniciado por zaic0

4 Respuestas
3843 Vistas
Último mensaje ſeptiembre 07, 2009, 01:48:09 pm
por zaic0
question
Error de aplicacion - La memoria no se puede "read"

Iniciado por zeth

2 Respuestas
1848 Vistas
Último mensaje Febrero 10, 2011, 09:28:55 pm
por zeth
xx
ampliar memoria de nokia 3220 con memoria usb conectada de alguna forma

Iniciado por spyderman

0 Respuestas
1487 Vistas
Último mensaje Junio 21, 2009, 10:39:21 am
por spyderman
resuelto
no me deja instalar el Win...

Iniciado por usuaria_101

7 Respuestas
2045 Vistas
Último mensaje Enero 20, 2011, 03:34:03 pm
por usuaria_101
question
No me deja iniciar el Spy-net

Iniciado por davidmichu

5 Respuestas
1249 Vistas
Último mensaje ſeptiembre 20, 2010, 08:24:49 am
por K@0$
resuelto
No me deja abrirlo ¿Por que?

Iniciado por Mr.Lerzep

7 Respuestas
1437 Vistas
Último mensaje Agosto 16, 2010, 01:37:15 pm
por JaAViEr
question
no me deja formatear

Iniciado por helloji

1 Respuestas
956 Vistas
Último mensaje Abril 30, 2010, 01:04:55 pm
por jamp
question
No me deja buscar.

Iniciado por huevo_dinamita

4 Respuestas
886 Vistas
Último mensaje Enero 05, 2013, 01:50:50 pm
por CodeSource