Tutte le domande

5
risposte

___ 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
___

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 si...
posta 17.09.2011 - 00:36
4
risposte

Come imparare e introdurre la mischia in una piccola startup? [chiuso]

Tra pochi mesi, un amico stabilirà la sua società di software di avvio e io sarò l'architetto del software con uno sviluppatore aggiuntivo. Anche se non abbiamo esperienza quotidiana con metodi agili, ho letto molto tipo di "panoramica" su di lo...
posta 17.10.2012 - 05:06
5
risposte

Uso dei caratteri nelle tue applicazioni

Quando si scrivono applicazioni per software, in particolare dispositivi mobili, ci sarà un problema con l'utilizzo di un tipo specifico di font (problemi di copyright / brevetto)? Se sì, come possiamo evitare questi possibili problemi? Qu...
posta 22.08.2011 - 19:01
1
risposta

Esistono linguaggi di programmazione in cui una variabile può veramente conoscere il proprio nome?

In PHP e Python si può iterare sulle variabili locali e, se c'è una sola scelta in cui il valore corrisponde, si potrebbe dire che si conosce il nome della variabile, ma questo non sempre funziona. Il codice macchina non ha nomi di variabili. La...
posta 06.12.2012 - 00:19
2
risposte

Il termine "Curva di apprendimento" include la conoscenza dei trucchi? [chiuso]

Quando impari nuove tecnologie passi il tempo a comprenderne i concetti e gli strumenti. Ma quando la tecnologia incontra la vita reale accadono cose strane e non piacevoli. I reuqirements sono spesso lontani dall'ideale e si differenziano dallo...
posta 08.11.2012 - 16:27
3
risposte

Vendi codice usando il codice GPL Open Source collegato in modo dinamico?

Sono davvero confuso. La GPL afferma che se inizi con il codice GPL e modifichi quel codice, devi rilasciare il tuo codice con modifiche gratuite anche sotto GPL. Ma cosa succede se si utilizza semplicemente il codice GPL esistente senza m...
posta 16.02.2013 - 18:07
2
risposte

Gli agenti basati su thread di Clojure gestiscono le prestazioni di c10k?

Sto scrivendo un servizio c10k e sto cercando di valutare le prestazioni di Clojure. Gli agenti Clojure possono gestire questa scala di concorrenza con i suoi agenti basati su thread? Altri sistemi ad alte prestazioni sembrano muoversi verso a...
posta 17.11.2012 - 12:49
2
risposte

Come gestire in modo efficace il controllo del codice sorgente per il progetto sia con sorgente aperta che chiusa?

Attualmente sto lavorando a un progetto che ha sia una "community edition" open-source che una serie di funzionalità closed-source per i clienti paganti. Uno dei punti critici in questo momento è capire come gestire la sincronizzazione dell'orig...
posta 10.08.2011 - 19:48
2
risposte

Denominazione dei pacchetti in stile Java e domini dei paesi di secondo livello

Possiedo un dominio .co.uk e ogni volta che mi occupo di denominazione del pacchetto in stile Java, sono andato con uk.co.domainname . Una volta che ho incontrato il pacchetto che ha fatto quanto segue: co.uk.domainname . Uno di quest...
posta 15.12.2012 - 14:36
2
risposte

Creazione di un enorme albero decisionale

Devo scrivere un correlatore di eventi. Una parte fondamentale del sistema sarà un albero decisionale che riconosce l'origine dell'errore basandosi su stati registrati e file di registro. Spesso molti incidenti differiscono con dettagli minor...
posta 09.01.2013 - 13:02