Ho imparato dolorosamente negli ultimi giorni molto sulla programmazione in C++.
So che dovrei rilasciare memoria: le regole "ogni malloc = free" o "each new = delete" esistono ora nel mio mondo, ma le sto utilizzando per oggetti piuttosto semplici.
E il vettore? Ovunque posso, sto usando vector.clear() ma questo chiaramente non è abbastanza, perché sto avendo enormi perdite di memoria.
Potresti guidarmi su come dovrei trattare questa cosa?Devo cancellare il vettore <string>?
* Modifica
Grazie, i tuoi commenti mi hanno fatto pensare all'algoritmo di questa applicazione e sarò in grado di eliminare totalmente il vettore. : O
Scusa - Ho iniziato a spiegare quale è il mio caso d'uso qui e ho scoperto di cosa ho veramente bisogno. È così quando si codifica ultimi 3 giorni per 18 ore al giorno: | * Modifica 2
Questo è pazzesco. Con piccole modifiche al codice, ho eliminato l'utilizzo della memoria da 2x130 mb (in costante crescita) in 2x 13,5 mb, dimensione costante. Grazie per avermi fatto riflettere in un altro modo.
Btw. tale revisione del codice ha un nome - qualcuno lo ricorda? È quando chiedi a qualcuno (anche a tua madre o al tuo cane) e inizia a spiegare qual è il tuo problema - e all'improvviso risolvi questo problema di 5 ore te stesso, solo cercando di guardarlo da un altro punto di vista, o semplicemente cercando di riassumere ciò che è tutto su. Mi capita spesso di essere catturato da questo ...
Dal momento che sei nuovo nella gestione della memoria, forse potresti spiegare come sai che stai ricevendo perdite di memoria. Alcuni modi per misurare le perdite di memoria non riflettono realmente ciò che sta accadendo. –
Si potrebbe voler postare alcuni esempi di codice di come si utilizza la classe vettoriale. Ad esempio, hai i vettori di puntatori agli oggetti creati dinamicamente? –
beh, vedo semplicemente che l'esecuzione della mia applicazione comporta un numero sempre maggiore di memoria occupata. Sto eseguendo operazioni abbastanza semplici (facendo gli hash MD5 in 2 processi, legati con mpcih2), per il mio test sono esattamente 25 milioni di operazioni. Un processo invia agli altri pacchetti di dati (stringhe) e il secondo calcola gli hash per quello. Alla fine dell'esecuzione ho 2x 130 mb presi. È troppo per essere normale. – IamDeveloper