Freezedevil
Lieutenant
- Registriert
- Mai 2011
- Beiträge
- 649
Hi,
ich versuche gerade mir die Benutzung von Smart Pointern anzueignen und hab dafür mal folgenden Codeschnipsel produziert.
Im else-Zweig werden Standardpointer genutzt, weshalb der Speicherplatz nach dem Verlassen des Blocks verloren ist. Mein Ziel war es jetzt eigentlich zu zeigen, dass das bei der Benutzung von shared_ptr nicht mehr der Fall ist, sprich bei "wait to free mem" ca 500MB belegt sind und bei "wait to end" dieser Platz wieder frei ist. Am Ende des else-Zweig wird der vector schließlich zerstört, womit es keine Referenzen mehr auf die angelegten Arrays gibt und der Smart Pointer diese löschen sollte. Jetzt zeigt mir die Systemüberwachung jedoch trotzdem an, dass nach wie vor 500MB Speicherplatz belegt sind. Was habe ich übersehen oder falsch verstanden?
ich versuche gerade mir die Benutzung von Smart Pointern anzueignen und hab dafür mal folgenden Codeschnipsel produziert.
Code:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
shared_ptr<char> allocShared() {
shared_ptr<char> ptr(new char[1024]);
return ptr;
}
char* allocStandard() {
return new char[1024];
}
int main(int argc, char* argv[]) {
int size = 1024*500;
if (argv[1] != NULL) {
cout << "shared" << endl;
vector<shared_ptr<char>> arr;
for (int i=0; i<size; ++i) {
arr.push_back(allocShared());
}
cout << "wait to free mem" << endl;
string wait;
cin >> wait;
} else {
cout << "standard" << endl;
for (int i=0; i<size; ++i) {
char* arr = allocStandard();
}
}
cout << "wait to end" << endl;
string wait;
cin >> wait;
return 0;
}
Im else-Zweig werden Standardpointer genutzt, weshalb der Speicherplatz nach dem Verlassen des Blocks verloren ist. Mein Ziel war es jetzt eigentlich zu zeigen, dass das bei der Benutzung von shared_ptr nicht mehr der Fall ist, sprich bei "wait to free mem" ca 500MB belegt sind und bei "wait to end" dieser Platz wieder frei ist. Am Ende des else-Zweig wird der vector schließlich zerstört, womit es keine Referenzen mehr auf die angelegten Arrays gibt und der Smart Pointer diese löschen sollte. Jetzt zeigt mir die Systemüberwachung jedoch trotzdem an, dass nach wie vor 500MB Speicherplatz belegt sind. Was habe ich übersehen oder falsch verstanden?