[gelöst] g++ programm braucht immer mehr speicher
-
ich hab ein programm geschrieben das von ner datenbank daten liest die formatiert und dann in ne andere db schreibt
das ganze läuft in ner schleife (while(1))
nun wird der speicherbedarf mit jedem durchlauf größer
warum kann das so sein?
wie kann ich das ändern?-O zum optimieren verwende ich schon
-
Da hast du wohl ein Speicherleck fabriziert...
-
ich bin erst am anfangen mit c++
wie kommt sowas zustande? beispiele?danke,
Thomas
-
new ohne delete und solche sachen.
du wirst vermutlich in deiner schleife speicher anfordern und diesen nicht wieder freigeben. am besten du zeigst uns mal deine schleife.
-
das is relativ umfangreich...jede menge funktionen
aber eigentlich nichts objektorientiertes
nur variablen und funktionen
vielleicht ne variable die immer länger wird oder so?
dürfte es aber nicht geben
muss ich den speicher von variablen wieder freigeben?[EDIT] hab eben http://tutorial.schornboeck.net/dyn_speicher.htm entdeckt
ich arbeite eigentlich nicht mit new sondern schreib einfach int i = 1;
wenn ich das so mach und immer diese variablen verwende....warum wird dann der speicherbedarf größer?
müsste doch gleich bleiben oder?
-
http://tutorial.schornboeck.net/variablen.htm
http://tutorial.schornboeck.net/stack_heap.htm
http://www.c-plusplus.net/forum/viewtopic.php?t=39486poste trotzdem mal deine schleife
-
danke
ich werd mal an meinem programmierstil arbeiten und das ganze nach den regeln vom tutorial schreiben
hab jetzt relativ viele globale variablen verwendet
-
Globale Variablen welche nicht zur erstellung von instanzen genutzt werden verunstalten den Code. Man muss immer in den Header scrollen um zu sehen, was x nochmals war, was y fuer werte beinhalten kann, etc. Wenn du Beispielsweise einen Pointer verwendest, sorge dafuer, dass du jeder Funktion welche etwas mit ihm zu tun hat diesen Pointer als Argument uebergeben kannst. Es sieht einfach sauberer und schoener aus.
-
debian inside schrieb:
hab jetzt relativ viele globale variablen verwendet
Das ist auch nicht so ganz das Wahre! Denk mal an die Gefahr, die Variablen z.B. durch einen Tippfehler zu überschreiben...Wenn du wirklich kein new/malloc verwendest, kann es sein, dass du irgendwo einen std::string / std::vector / std::list o.ä. rumliegen hast? Wenn ja, gibt es zwei Möglichkeiten:
- Du fügst neue Elemente in den Container ein ohne andere eventuell nicht mehr benötigte Elemente zu löschen.
- Der Container behält den Speicher nach dem Löschen einiger Elemente und gibt ihn nicht sofort wieder frei. Das ist korrektes Verhalten, da er so schnell wieder neue Elemente einfügen kann. Außerdem reserviert der Container meistens etwas mehr Speicher als er im Moment braucht, weil das Reservieren von neuem Speicher eine relativ zeitaufwändige Sache sein kann.
Es wäre wirklich hilfreich, wenn du den entsprechenden Teil deines Codes posten könntest, meine Glaskugel ist gerade kaputt...
Wenn du schon dabei bist, könntest du auch noch posten, wieviel Speicher "verloren geht".
-
hab danach übrigens den code komplett überarbeitet
hatte zbsp auch keine mysql_free_result() eingebaut...
jetzt läuft das ding stabil
danke