___ terminologia qstnhdr ___: perdita di memoria ______ qstntxt ___

Quando sento il termine perdita di memoria con ciò intendo un bug in un programma che non causa nessun problema tranne che non libera risorse di memoria e, se continua a farlo, può consumare molta memoria, danneggiare le prestazioni del sistema e, nel peggiore dei casi, mandare in crash il programma (o un altro programma, se il sistema operativo decide di scegliere di ucciderlo). / p>

Ma ora, in questa sezione di commenti di questa domanda, gli upvotes mi hanno fatto pensare se questo è l'intero significato del termine. In passato l'ho sempre visto usato in quel senso.

link

Quindi, chiameresti qualcosa una semplice perdita di memoria che blocca un programma da qualche altro effetto collaterale o causerebbe un dead-block non liberando un lock?

Aggiornamento - Nota: sfortunatamente alcuni admin hanno cancellato la sezione dei commenti, quindi non posso più fare riferimento a quella discussione: /

Fondamentalmente ho detto che una perdita di memoria è innocua tranne che mangia memoria (e di conseguenza a lungo termine in questo senso può essere dannoso, bloccando l'app / sistema). Hanno detto che non è vero, con C ++ RAII può causare seri problemi. - Sì, se non si elimina un oggetto con un codice importante nel distruttore che può causare problemi, ma nel mio vocabolario è un bug grave e non una perdita di memoria.

    
______ azszpr108885 ___

La perdita di memoria quintessenziale sarebbe esattamente ciò che hai descritto, l'incapacità di liberare un po 'di memoria che il processo aveva allocato. Le conseguenze sarebbero normalmente che il programma crescesse gradualmente di dimensioni mentre è in esecuzione, con possibili effetti secondari a causa di ciò. Le allocazioni di memoria successive potrebbero non riuscire o il sistema potrebbe comportarsi in modo anomalo a causa delle risorse sprecate.

Tuttavia, un problema può essere descritto con precisione come una perdita di memoria, a condizione che in effetti la perdita di memoria. Può anche fare altre cose che sono potenzialmente più serie. Ad esempio, se non si riesce a chiudere un flusso I / O standard, si verificherà una perdita di memoria perché la memoria associata al flusso verrà interrotta. Tuttavia, può anche eseguire il processo fuori dai descrittori di file o forse causare un successivo flusso aperto in errore a causa di un limite sul numero di flussi I / O standard.

    
______ azszpr108919 ___

Dipende. Certamente il programma potrebbe essersi arrestato a causa di una perdita di memoria. Ma non chiamerei tutte le perdite di memoria di crash. Una perdita di memoria ha una definizione molto chiara.

Un arresto anomalo dell'applicazione potrebbe essere causato da molte cose diverse.

  • Eccezione non gestita
  • Perdita di memoria
  • Perdita di risorse
  • Deadlock
  • Altro (bug nel codice)

Al momento del crash si dovrebbe prendere un crash / memoria dump e usare qualcosa come Windbg per analizzare lo stato del codice al momento del crash per determinare se si trattava di una perdita di memoria, deadlock, bug, ecc.

Una perdita di memoria semplicemente non libera la memoria dopo averla finita. Ciò può causare un arresto anomalo se i limiti delle risorse sono soddisfatti come indicato.

Una perdita di risorse non libera la risorsa dopo averla finita. Un esempio potrebbe essere aprire una connessione al database e non chiuderla dopo aver terminato.

I deadlock sono diversi dalle perdite, perché le perdite possono non essere rilevate e potrebbero essere benigne se le risorse di sistema non vengono consumate. I deadlock sono una condizione che non si accumula nel tempo.

    
______ azszpr108888 ___

Un significato correlato di "perdita di memoria" si applica alle lingue che usano la garbage collection. Lì, la memoria supposto deve essere trapelata, ma se non lo fai, è lo stesso problema.

    
______ azszpr108926 ___

Si verificano perdite di memoria Se non si riesce a eliminare la memoria allocata dinamicamente. puntamento la perdita di memoria è uno degli aspetti più lunghi e noiosi della programmazione in ambienti non gestiti.

Un semplice esempio di perdita di memoria può essere seguito.

%pre%     
______ azszpr108884 ___

link

%bl0ck_qu0te%

Le perdite di memoria possono causare errori casuali poiché alla memoria possono essere assegnati valori imprevisti.

%bl0ck_qu0te%

I blocchi morti possono essere causati dalla memoria a cui sono stati assegnati valori imprevisti.

Ulteriori letture su questo argomento:

  1. link
  2. link
___

5

Quando sento il termine perdita di memoria con ciò intendo un bug in un programma che non causa nessun problema tranne che non libera risorse di memoria e, se continua a farlo, può consumare molta memoria, danneggiare le prestazioni del sistema e, nel peggiore dei casi, mandare in crash il programma (o un altro programma, se il sistema operativo decide di scegliere di ucciderlo). / p>

Ma ora, in questa sezione di commenti di questa domanda, gli upvotes mi hanno fatto pensare se questo è l'intero significato del termine. In passato l'ho sempre visto usato in quel senso.

link

Quindi, chiameresti qualcosa una semplice perdita di memoria che blocca un programma da qualche altro effetto collaterale o causerebbe un dead-block non liberando un lock?

Aggiornamento - Nota: sfortunatamente alcuni admin hanno cancellato la sezione dei commenti, quindi non posso più fare riferimento a quella discussione: /

Fondamentalmente ho detto che una perdita di memoria è innocua tranne che mangia memoria (e di conseguenza a lungo termine in questo senso può essere dannoso, bloccando l'app / sistema). Hanno detto che non è vero, con C ++ RAII può causare seri problemi. - Sì, se non si elimina un oggetto con un codice importante nel distruttore che può causare problemi, ma nel mio vocabolario è un bug grave e non una perdita di memoria.

    
posta Karoly Horvath 17.09.2011 - 02:36
fonte

5 risposte

5

La perdita di memoria quintessenziale sarebbe esattamente ciò che hai descritto, l'incapacità di liberare un po 'di memoria che il processo aveva allocato. Le conseguenze sarebbero normalmente che il programma crescesse gradualmente di dimensioni mentre è in esecuzione, con possibili effetti secondari a causa di ciò. Le allocazioni di memoria successive potrebbero non riuscire o il sistema potrebbe comportarsi in modo anomalo a causa delle risorse sprecate.

Tuttavia, un problema può essere descritto con precisione come una perdita di memoria, a condizione che in effetti la perdita di memoria. Può anche fare altre cose che sono potenzialmente più serie. Ad esempio, se non si riesce a chiudere un flusso I / O standard, si verificherà una perdita di memoria perché la memoria associata al flusso verrà interrotta. Tuttavia, può anche eseguire il processo fuori dai descrittori di file o forse causare un successivo flusso aperto in errore a causa di un limite sul numero di flussi I / O standard.

    
risposta data 17.09.2011 - 03:10
fonte
1

Dipende. Certamente il programma potrebbe essersi arrestato a causa di una perdita di memoria. Ma non chiamerei tutte le perdite di memoria di crash. Una perdita di memoria ha una definizione molto chiara.

Un arresto anomalo dell'applicazione potrebbe essere causato da molte cose diverse.

  • Eccezione non gestita
  • Perdita di memoria
  • Perdita di risorse
  • Deadlock
  • Altro (bug nel codice)

Al momento del crash si dovrebbe prendere un crash / memoria dump e usare qualcosa come Windbg per analizzare lo stato del codice al momento del crash per determinare se si trattava di una perdita di memoria, deadlock, bug, ecc.

Una perdita di memoria semplicemente non libera la memoria dopo averla finita. Ciò può causare un arresto anomalo se i limiti delle risorse sono soddisfatti come indicato.

Una perdita di risorse non libera la risorsa dopo averla finita. Un esempio potrebbe essere aprire una connessione al database e non chiuderla dopo aver terminato.

I deadlock sono diversi dalle perdite, perché le perdite possono non essere rilevate e potrebbero essere benigne se le risorse di sistema non vengono consumate. I deadlock sono una condizione che non si accumula nel tempo.

    
risposta data 17.09.2011 - 04:38
fonte
0

Un significato correlato di "perdita di memoria" si applica alle lingue che usano la garbage collection. Lì, la memoria supposto deve essere trapelata, ma se non lo fai, è lo stesso problema.

    
risposta data 17.09.2011 - 03:33
fonte
0

Si verificano perdite di memoria Se non si riesce a eliminare la memoria allocata dinamicamente. puntamento la perdita di memoria è uno degli aspetti più lunghi e noiosi della programmazione in ambienti non gestiti.

Un semplice esempio di perdita di memoria può essere seguito.

int main(void)
{
    /* this is an infinite loop calling the malloc function which
     * allocates the memory but without saving the address of the
     * allocated place */
   while (malloc(50)); /* malloc will return NULL sooner or later, due to lack of memory */
   return 0;  /* free the allocated memory by operating system itself after program exits */
}
    
risposta data 17.09.2011 - 08:28
fonte
-2

link

would you call something a simple memory leak that crashes a program by some other side-effect

Le perdite di memoria possono causare errori casuali poiché alla memoria possono essere assegnati valori imprevisti.

causing a dead-lock by not freeing a lock?

I blocchi morti possono essere causati dalla memoria a cui sono stati assegnati valori imprevisti.

Ulteriori letture su questo argomento:

  1. link
  2. link
risposta data 17.09.2011 - 02:40
fonte

Leggi altre domande sui tag