000
15.11.2020, 19:01 Uhr
Phi
|
Hallo liebe Community,
ich stehe derzeit etwas auf dem Schlauch bzgl. der Speicherauslastung bei der Nutzung von Pointern. Grundsätzlich ist ein Pointer erstmal nix anderes als ein Adresse, welche den Inhalt eines Objektes X beinhaltet.
Über new lässt sich ja solch eine Speicherreservierung manuell vornehmen. Diese muss dann über delete wieder freigegeben werden um Speicherlecks zu vermeiden.
Da ich mit Visual Studio 2015 arbeite, habe ich dort das Diagnosetool verwendet um mir die Heapauslastung anzuschauen. Im meinem eigentlichen Programm habe ich festgestellt, dass im Prozessablauf dieser Speicher immer mehr gefüllt wird (welches ich mir erklären kann, da einige Instanzen einer Klasse dynamisch erzeugt werden), jedoch nicht freigegeben wird (über eine Tasteneingabe lösche ich sämtliche erzeugte Instanzen).
Daher habe ich ein kleines Testprogramm geschrieben um genauer zu verstehen was mir das Diagnosetool anzeigt.
C++: |
int main() {
1) std::cout << "Start program" << std::endl;
int* a = new int; int* b = new int;
2) std::cout << "Created pointers!" << std::endl;
delete b;
3) std::cout << "Deleted 'b'" << std::endl;
4) std::cin >> *a;
5) delete a;
6) std::cout << "Deleted 'a'" << std::endl;
return 1; }
|
Die Punkte an den Zeilenanfängen sind meine Haltepunkte, an welche ich die Momentaufnahmen der Speicherauslastung genommen habe. Das Diagnosetool meldet mir dann die folgenden Veränderungen (https://www.bilder-upload.eu/bild-43fac8-1605462833.png.html).
Dort lässt sich erkennen, dass beim Erzeugen der Integer-Pointer insgesamt 0,08 KB (2) belegt werden (sprich 0,04 KB pro Pointer). Wenn der Pointer b gelöscht wird (3), werden auch exakt 0,04 KB freigegeben. Jetzt kommt einer der Punkte, den ich nicht nachvollziehen kann. Bei Punkt 4) wird in der Wert des Pointers a auf 1 gesetzt. Dadurch werden dann anscheinen 4,34 KB belegt. Wieso kommt es dazu? Oder ist meine Annahme falsch, dass genügend Speicher für einen Integer reserviert wurde (mit den 0,04 KB) und der wird erst bei der Wertzuweisung erweitert? Falls dies aber der Fall ist erklärt sich mir dann aber nicht, warum an Punkt 6) wieder nur 0,04 KB freigegeben werden.
Ich hoffe ich habe die richtige Stelle hier im Forum für meine Frage erwischt, falls nicht gerne verschieben
Viele Grüße,
Phi Dieser Post wurde am 15.11.2020 um 19:02 Uhr von Phi editiert. |