Sto sviluppando una simulazione fisica e, dato che sono piuttosto nuovo nella programmazione, continuo a riscontrare problemi quando produco programmi di grandi dimensioni (principalmente problemi di memoria). Conosco l'allocazione e l'eliminazione dinamica della memoria (nuovo / elimina, ecc.), Ma ho bisogno di un approccio migliore a come strutturare il programma.
Diciamo che sto simulando un esperimento che sta funzionando da alcuni giorni, con una frequenza di campionamento molto grande. Avrei bisogno di simulare un miliardo di campioni e passarci sopra.
Come versione super semplificata, diremo che un programma prende tensioni V [i] e le somma in cinque:
cioè NewV [0] = V [0] + V [1] + V [2] + V [3] + V [4]
quindi NewV [1] = V [1] + V [2] + V [3] + V [4] + V [5]
quindi NewV [2] = V [2] + V [3] + V [4] + V [5] + V [6] ... e questo continua per un miliardo di campioni.
Alla fine, avrei V [0], V [1], ..., V [1000000000], quando invece gli unici che dovrei memorizzare per il passaggio successivo sono gli ultimi 5 V [i] S.
Come potrei eliminare / deallocare parte dell'array in modo che la memoria sia libera di riutilizzarla (diciamo V [0] dopo la prima parte dell'esempio in cui non è più necessaria)? Esistono alternative a come strutturare un tale programma?
Ho sentito parlare di malloc / free, ma ho sentito che non dovrebbero essere usati in C ++ e che ci sono alternative migliori.
Grazie mille!
TLDR; cosa fare con parti di array (singoli elementi) che non mi servono più e che occupano un'enorme quantità di memoria?
V
anziché in un nuovo array. Fondamentalmente, tuttavia, penso che il tuo problema sia nei tuoi algoritmi o nelle tue strutture di dati, e poiché non abbiamo dettagli, è difficile sapere come farlo in modo efficiente.