Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [C] Scrittura su file ed aumento della memoria occupata

    Buongiorno

    Ho un problema un po strano con un logger che ho sviluppato un po di tempo fa. Il funzionamento è molto semplice:

    codice:
    void LOG(int level,char *fmt, ...)
    La funzione prende un intero che rappresenta il livello dell'informazione da loggare (errore,warning,info,eccetera) ed una stringa di formato che poi viene passata ad una fprintf.

    Il codice è addirittura banale
    codice:
    if (level<=LOG_LEVEL)
    	{
    		time_t now;
    		char * ctime_str;
    		char * str_date;
    
    		va_list args;
    		char buf[1024];
    
    		va_start(args, fmt);
    		vsprintf(buf, fmt, args);
    		va_end(args);
    		OutputDebugString(buf);
    		
    		str_date = (char *)malloc(128*sizeof(char));
    
    		now = time(NULL);
    		ctime_str = ctime(&now);
    
    		strncpy(str_date,ctime_str,strlen(ctime_str)-1);
    		str_date[strlen(ctime_str)-1] = '\0';
    							
    		fprintf(log_file, "[%s][%s]: %s",str_date,LOGLBL[level], buf);
                    fflush(log_file);
    
    		#ifdef _DEBUG_LOGV 
    			fprintf(stderr, "[%s][%s]: %s",str_date,LOGLBL[level], buf);	
                            fflush(stderr);
    		#endif
    		
    		
    		free(str_date);
    	}
    Questo è praticamente tutto il codice della funzione. Ora che succede: se imposto un livello di logging alto vengono scritte molte informazioni, perchè il programma che integra il logger stesso è invocato continuamente.

    Il problema: nonostante il flush del buffer vedo la memoria occupata dall'applicazione salire costantemente fino, nel caso limite, a sforare la quantità di memoria virtuale della macchina. Se imposto un livello di logging basso o addirittura disabilito il logger la memoria occupata resta stazionaria perciò sono sicuro che dipende da questo.
    Ci deve essere qualche buffer che si riempie ma non so dove...il tutto gira su winXP.

    Grazie dell'attenzione

  2. #2
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67

    :(

    :master:
    Mi pare sia tutto a posto. La stringa che passi a questa funzione è allocata staticamente o dinamicamente? La funzione `OutputDebugString' l'hai controllata?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Si, non credo sia quella.

  4. #4
    se imposto un livello di logging alto vengono scritte molte informazioni, perchè il programma che integra il logger stesso è invocato continuamente
    Cosa vuol dire, che il programma avvia altre copie del programma?
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.