2016-07-22 9 views
-2

Als ich eine verkettete Liste in C++ für mein Studium zu machen, sagte mein Professor uns zu benutzen Sie einfach:Wie überprüft man, ob eine verknüpfte Liste nicht genügend Speicher/voll ist?

bool Stack::full() const{ 
    return false; //Assume infinite memory 
} 

Für unsere verknüpften Liste Implementierungen der Datenstrukturen, die wir in der Klasse (Stacks, Listen, Warteschlangen).

Wenn Sie etwas auf den Stack schieben und der Stack die maximale Speicherkapazität verwendet, kann dies dazu führen, dass die Anwendung abstürzt oder etwas komisches tut, nicht wahr?

Gibt es eine Möglichkeit zu überprüfen, dass die verknüpfte Liste voll/nicht genügend Speicher hat? Oder wird normalerweise angenommen, dass verknüpfte Listen nicht so groß werden, dass sie nicht genügend Speicher haben?

+0

Mögliches Duplikat von [Wie kann CPU- und Speicherverbrauch innerhalb eines Prozesses ermittelt werden?] (Http://stackoverflow.com/questions/63166/how-to-determine-cpu-and-memory-consumption-from-) Inside-a-process) – PhotometricStereo

+1

Auf einem System mit virtuellem Speicher, wie es heute bei allen Desktop-Systemen der Fall ist, passiert es, wenn die Speicherbelegung eines Prozesses die Größe des physischen Speichers übersteigt, dass die Dinge langsamer laufen **. Und langsamer. Und sloooooooower. Sie werden wahrscheinlich nie an die Grenzen kommen, den gesamten verfügbaren Adressraum zu verbrauchen, selbst auf einem 32-Bit-System. Lange bevor das unglückliche System effektiv zum Stillstand kommt, erzeugt es seltsame Winsing-Geräusche von seiner Festplatte. –

+0

Okay, ich nehme an, es ist normalerweise völlig in Ordnung zu sagen, dass eine verknüpfte Liste niemals voll ist, es sei denn, Sie müssen sie aus anderen Gründen explizit einschränken. Vielen Dank! –

Antwort

2

"Nicht genügend Arbeitsspeicher" ist ein sehr schweres Problem zu lösen ... Es wird angenommen, dass sobald Sie aus dem Speicher haben, Sie keinen Speicher übrig haben, um den Fehler zu behandeln.

Abgesehen davon: Entweder legen Sie selbst eine Obergrenze für die Anzahl der Elemente fest (eine gesunde Sache!), Oder das System wird Sie warnen, indem Sie nicht genügend Speicher reservieren.

Die Container der Standardbibliothek tun dies bereits und werden diesen Zuweisungsfehler überprüfen und eine bad_alloc Ausnahme auslösen.

Das ist, warum Ihr Professor auch Sie gesagt haben, sollten nie Stapel, Vektoren zu schreiben und Listen selbst, sondern die, die in der STL verwenden, und starten Sie reale Probleme zu lösen :)

+0

"Deshalb sollte dein Professor dir auch gesagt haben, du sollst niemals selbst Stacks, Vektoren und Listen schreiben". Widersprach hier stark. Schreibe jeden von diesen mindestens einmal in deinem Leben als ein Bildungsunternehmen. Es ist selten, dass Sie nur eine Standardlösung verwenden sollten, ohne zumindest zu wissen, wie diese Lösung funktioniert. – Taywee

0

ersten Speicher zuweisen mit malloc() Funktion bestimmter Knoten, wenn malloc() Funktion gibt NULL Wert dann Speicher ist voll.

+0

Kannst du mir ein kleines Beispiel geben? –