Ich entwickle eine Physiksimulation und da ich in der Programmierung noch nicht so weit bin, habe ich immer wieder Probleme beim Erstellen großer Programme (hauptsächlich Speicherprobleme). Ich kenne mich mit dynamischer Speicherzuweisung und -löschung (neu / löschen usw.) aus, benötige jedoch einen besseren Ansatz für die Strukturierung des Programms.
Angenommen, ich simuliere ein Experiment, das einige Tage lang ausgeführt wird, mit einer sehr hohen Abtastrate. Ich müsste eine Milliarde Proben simulieren und überfliegen.
Als supervereinfachte Version sagen wir, ein Programm nimmt die Spannungen V [i] und summiert sie in fünf:
dh NewV [0] = V [0] + V [1] + V [2] + V [3] + V [4]
dann ist NewV [1] = V [1] + V [2] + V [3] + V [4] + V [5]
dann ist NewV [2] = V [2] + V [3] + V [4] + V [5] + V [6] ... und das geht für eine Milliarde Abtastungen weiter.
Am Ende hätte ich V [0], V [1], ..., V [1000000000], wenn stattdessen die einzigen, die ich für den nächsten Schritt speichern müsste, die letzten 5 V [i] wären. s.
Wie würde ich einen Teil des Arrays löschen / freigeben, damit der Speicher wieder verwendet werden kann (sagen Sie V [0] nach dem ersten Teil des Beispiels, in dem er nicht mehr benötigt wird)? Gibt es Alternativen zur Strukturierung eines solchen Programms?
Ich habe von malloc / free gehört, aber gehört, dass sie nicht in C ++ verwendet werden sollten und dass es bessere Alternativen gibt.
Vielen Dank!
tldr; Was mache ich mit Teilen von Arrays (einzelnen Elementen), die nicht mehr benötigt werden und sehr viel Speicher beanspruchen?
V
einem neuen Array speichern . Grundsätzlich denke ich jedoch, dass Ihr Problem entweder in Ihren Algorithmen oder in Ihren Datenstrukturen liegt, und da wir keine Details haben, ist es schwierig zu wissen, wie man es effizient macht.