Quien sabe como generar informe del estado de la memoria...

Quien sabe como generar informe del estado de la memoria...

Postby xmanuel » Fri Jul 17, 2015 8:29 am

Pues eso, qué es lo que hay que hacer para que cuando no se libera memoria reservada previamente, el programa EXE genere un fichero "hb_out.log" con el informe del estado de la memoria
:shock: :lol:

Gracias compañeros!!!
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 761
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Quien sabe como generar informe del estado de la memoria...

Postby Antonio Linares » Fri Jul 17, 2015 9:09 am

Manuel,

Y como estas reservando esa memoria previamente ?

hb_xgrab() ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42073
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Quien sabe como generar informe del estado de la memoria...

Postby xmanuel » Fri Jul 17, 2015 10:37 am

Si con hb_xgrab() :D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 761
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Quien sabe como generar informe del estado de la memoria...

Postby Antonio Linares » Fri Jul 17, 2015 12:11 pm

En principio todo lo que tienes que hacer es llamar a hb_xfree( ... ) cuando ya no necesites esa memoria.

Se puede construir un Harbour con control de memoria usando unos determinados flags,
pero es más lento que sin ellos.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42073
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Quien sabe como generar informe del estado de la memoria...

Postby xmanuel » Fri Jul 17, 2015 6:44 pm

Jajaja ya eso lo sé Antonio...
El tema es controlar que no me he saltado ningún hb_xfree( ... ) sin querer o ningún itemRelease( ... )

Y esto es en fase de desarrollo así que me da igual que vaya lento...

Estoy desarrollando un LIB para acceso a bases de datos con clases hechas en C completamente.
La verdad es que me va quedando muy bien. Con el preprocesador de C he conseguido facilitar el desarrollo...
Mira este ejemplo:
Code: Select all  Expand view


CREATE_CLASS( "THASHCURSOR", THASHCURSOR, THASHCURSOR_IVARCOUNT )

    /* Metodos */
    METHOD( "NEW",          THASHCURSOR_NEW )
    METHOD( "GETCURSOR",    THASHCURSOR_GETCURSOR )
    METHOD( "SETCURSOR",    THASHCURSOR_SETCURSOR )
    METHOD( "RECNO",        THASHCURSOR_RECNO )
    METHOD( "RECCOUNT",     THASHCURSOR_RECCOUNT )
    METHOD( "GOTO",         THASHCURSOR_GOTO )
    METHOD( "GOTOP",        THASHCURSOR_GOTOP )
    METHOD( "GOBOTTOM",     THASHCURSOR_GOBOTTOM )
    METHOD( "SKIP",         THASHCURSOR_SKIP )
    METHOD( "SKIPPER",      THASHCURSOR_SKIPPER )
    METHOD( "NEXT",         THASHCURSOR_NEXT )
    METHOD( "PRIOR",        THASHCURSOR_PRIOR )
    METHOD( "EOF",          THASHCURSOR_EOF )
    METHOD( "BOF",          THASHCURSOR_BOF )
    METHOD( "FIELDCOUNT",   THASHCURSOR_FIELDCOUNT )
    METHOD( "FIELDGET",     THASHCURSOR_FIELDGET )
    METHOD( "GETBYNAME",    THASHCURSOR_GETBYNAME )
    METHOD( "FIELDNAME",    THASHCURSOR_FIELDNAME )
    METHOD( "FIELDLEN",     THASHCURSOR_FIELDLEN )
    METHOD( "FIELDTYPE",    THASHCURSOR_FIELDTYPE )
    METHOD( "SCAN",         THASHCURSOR_SCAN )
    METHOD( "ASARRAY",      THASHCURSOR_ASARRAY )
    METHOD( "CLOSE",        THASHCURSOR_CLOSE )

END_CLASS

/***
 * Metodo: NEW
 * Uso: Constructor de la clase
 * Parametros: Ninguno
 * Devuelve: Self, un objeto inicializado
 */


HB_METHOD( THASHCURSOR_NEW )
{
    PHB_ITEM pSelf = hb_pSelf();
    HASHCURSORP hc = hb_xgrab( sizeof( HASHCURSOR ) );

    if( hc )
    {
        PHB_ITEM paValue = hb_param( 1, HB_IT_ARRAY );

        hc->paValue = hb_itemNew( NULL );

        if( paValue )
        {
            hb_itemCopy( hc->paValue, paValue );
        }
        else
        {
            hb_arrayNew( hc->paValue, 0 );
        }

        if( hb_arrayLen( hc->paValue ) > 0 )
        {
            setRecNo( hc, 1 );
            setEOF( hc, HB_FALSE );
        }
        else
        {
            setRecNo( hc, 0 );
            setEOF( hc, HB_TRUE );
        }

        setBOF( hc, HB_TRUE );
        setFound( hc, HB_FALSE );

        hb_arraySetPtr( pSelf, IVAR_HASHCURSOR, hc );
    }

    /* Devuelve SELF */

    hb_itemReturnRelease( pSelf );
}
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 761
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Quien sabe como generar informe del estado de la memoria...

Postby Antonio Linares » Sat Jul 18, 2015 10:06 am

Manuel,

Si revisas en los fuentes de Harbour el módulo fm.c:

https://github.com/harbour/core/blob/master/src/vm/fm.c

Verás que cuando se ha construido con el define HB_FM_STATISTICS se usa una lista enlazada de bloques de memoria que contienen la información que buscas:

En hb_xalloc():
Code: Select all  Expand view
if( ! s_pFirstBlock )
      {
         pMem->pPrevBlock = NULL;
         s_pFirstBlock = pMem;
      }
      else
      {
         pMem->pPrevBlock = s_pLastBlock;
         s_pLastBlock->pNextBlock = pMem;
      }
      s_pLastBlock = pMem;
      pMem->pNextBlock = NULL;

      pMem->u32Signature = HB_MEMINFO_SIGNATURE;
      HB_FM_SETSIG( HB_MEM_PTR( pMem ), nSize );
      pMem->nSize = nSize;  /* size of the memory block */

      s_nMemoryConsumed += nSize + sizeof( HB_COUNTER );
      if( s_nMemoryMaxConsumed < s_nMemoryConsumed )
         s_nMemoryMaxConsumed = s_nMemoryConsumed;
      s_nMemoryBlocks++;
      if( s_nMemoryMaxBlocks < s_nMemoryBlocks )
         s_nMemoryMaxBlocks = s_nMemoryBlocks;
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42073
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Quien sabe como generar informe del estado de la memoria...

Postby Antonio Linares » Sat Jul 18, 2015 10:08 am

En s_nMemoryConsumed tendrias la memoria consumida y en s_nMemoryBlocks en número de bloques de memoria

Debe haber alguna función que recorre esos bloques.

Espero que con esta pista tu ya lo puedas solucionar :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42073
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Quien sabe como generar informe del estado de la memoria...

Postby xmanuel » Sat Jul 18, 2015 11:31 pm

Muchas gracias Antonio...
He recompilado mi Harbour y ya me sale el dichoso informe.

Jejeje qué haríamos sin ti?!!!

PD: Ayer estube en el concierto de tu tocallo Marc Anthony ahí en Málaga, mi mujer es una fanática...

Si hubiera ido con tiempo te aviso para ir a verte.

Muchas gracias por tu ayuda :D
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 761
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: groiss and 52 guests