Perché si chiama perdita di memoria?

2

Sono un programmatore hobbista, un po 'pignolo per la terminologia, attualmente sto imparando C e recentemente ho scoperto il concetto di Perdita di memoria . Ora capisco cosa significa. La memoria dinamica assegnata a un programma non viene restituita dal programma.

Ma da dove viene il termine " leak "? Proviene dal fatto che altri programmi non possono accedere alla memoria dinamica, dal momento che uno lo sta già facendo, e quindi la memoria totale disponibile dal sistema operativo all'heap è ridotta e quindi " trapelato " a quello Hogging? Fondamentalmente, vediamo la perdita di memoria dal punto di vista del sistema operativo? E quindi dicendo che è trapelato al programma?

    
posta user1720897 16.06.2014 - 11:45
fonte

4 risposte

11

Guardalo dall'altra parte, dal punto di vista del sistema. Hai un enorme pool di memoria libera (memoria ram gratuita) in cui possono essere utilizzati diversi programmi. Ma tutte le loro risorse utilizzate dovrebbero essere restituite prima o poi, o almeno utilizzate per tutto il tempo. Quando non ne hai più bisogno, devi restituirlo al pool di memoria libera. Le applicazioni che continuano a richiedere memoria dal pool, ma non lo restituiscono mai quando hanno finito di utilizzarlo, causano una perdita nel pool di memoria libero finché non vengono interrotte. Il programma è una perdita per il pool di memoria libera e penso che da questo punto di vista il termine leak leak sia una denominazione corretta.

Quindi vedremo la perdita dal punto di vista del sistema.

    
risposta data 16.06.2014 - 12:29
fonte
5

È abbastanza auto esplicativo. L'applicazione sta riducendo la memoria di sistema, questa memoria è allocata ma non utile al codice in esecuzione. Questo è analogo a una perdita fisica poiché la memoria di sistema viene lentamente persa (come l'acqua da un secchio che perde) a una allocazione inutile. Non sono sicuro dell'etimologia, ma è un'analogia abbastanza ovvia, quindi dubito che ci sia un'origine chiara.

    
risposta data 16.06.2014 - 12:14
fonte
1

Ci sono due teorie su dove ha origine il termine "perdita" e altre analogie basate su liquidi per la memoria.

Nell'ENIAC, e in sistemi molto vecchi, la memoria era immagazzinata nel mercurio circolante, qualcosa chiamato linea di ritardo del mercurio. Le informazioni erano rappresentate come una carica in una porzione di mercurio che circolava intorno ai tubi. La carica è stata letta quando quella parte del mercurio passava attraverso i rilevatori (BTW, ecco perché ENIAC poteva usare solo metà della memoria ... vedi sotto).

In questo caso, una perdita di memoria è abbastanza letterale e abbastanza rischiosa.

L'altra teoria viene dai giorni mainframe. La memoria era condivisa tra tutti i lavori in esecuzione ed era chiamata "pool" di memoria dopo cose come pool di motori, pool di segreteria e simili. Quando un lavoro (programma) ha causato l'inaccessibilità della memoria, tale memoria "è fuoriuscita" dal pool.

Nota a margine: per quanto riguarda la memoria ENIAC. ENIAC aveva un motore di calcolo centrale con memoria del ritardo del mercurio negli armadietti su entrambi i lati. Il problema è che l'accesso alla memoria richiede la conoscenza dei tempi e che dipende dalla temperatura. Non è stato possibile mantenere una temperatura costante in entrambi gli armadi di memoria e non c'era un modo efficace per regolare un programma in base al cabinet utilizzato. Il risultato è che ENIAC di solito ha solo metà memoria.

    
risposta data 15.04.2016 - 20:07
fonte
0

Pensa a un utilizzo della memoria dei programmi come un sistema di raffreddamento ad acqua chiuso in un'automobile:

L'acqua viene pompata fuori dal serbatoio per le parti che necessitano di raffreddamento, quindi sul radiatore e ritorna al serbatoio. In questo modo le stesse molecole d'acqua vengono utilizzate più e più volte, per giorni, mesi, anni. Finché il sistema è perfettamente chiuso, può funzionare virtualmente per sempre. Ciò corrisponde molto bene all'utilizzo ideale della memoria da parte di un'applicazione: tutta la memoria viene restituita al serbatoio quando non è attualmente necessaria, in modo che possa essere utilizzata più e più volte, consentendo al processo di funzionare per sempre.

Ora, cosa succede quando hai una perdita? L'acqua / memoria è persa per il riutilizzo. Non ti interessa davvero dove sia finita l'acqua / la memoria. Se viene perso dal sistema chiuso di tubi / regioni di memoria note che alla fine verranno restituite al serbatoio, il serbatoio si esaurirà gli straordinari. L'ammontare nel serbatoio diminuirà nel tempo fino a quando non sarà rimasto abbastanza per garantire il corretto funzionamento. Anche in questo caso l'analogia è piuttosto buona: l'auto perde l'acqua di raffreddamento per il riutilizzo, la memoria dell'applicazione. La macchina finirà per surriscaldarsi, l'arresto anomalo dell'applicazione.

Onestamente non so se questa è l'analogia che le persone che hanno coniato il termine "perdita di memoria" avevano in mente, ma scommetto che è abbastanza vicino. Dopotutto, la memoria era una risorsa davvero scarsa nei primi giorni dell'informatica quando il termine fu coniato. È come far funzionare un sistema di raffreddamento con un serbatoio davvero minimo: qualsiasi perdita minore porterà a guasti in pochissimo tempo. Quindi, il riutilizzo della memoria doveva essere perfetto per consentire il buon funzionamento per un periodo di tempo prolungato.

    
risposta data 15.04.2016 - 23:31
fonte

Leggi altre domande sui tag