Seite 1 von 1
Alternative zur Qlist?
Verfasst: 25. April 2012 09:58
von gandalffo
Hallo Leute,
Meine QList gibt den Speicher nicht mehr frei, ich weiß das Thema wurde hier schon oft behandelt aber ich habe nie
wirklich eine Lösung für das Problem gesehen.
Ich habe eine eigenes Object (primitive class) in der ich 2 QLists habe eine mit
int und eine mit QString.
Ich habs im Destruktur mit clear() und mit qDeleteAll() probiert, ohne Erfolg.
Re: Alternative zur Qlist?
Verfasst: 25. April 2012 10:25
von franzf
gandalffo hat geschrieben:Meine QList gibt den Speicher nicht mehr frei
und wie kommst du zu der Annahme?
Ich habe eine eigenes Object (primitive class) in der ich 2 QLists habe eine mit
int und eine mit QString.
Ich habs im Destruktur mit clear() und mit qDeleteAll() probiert, ohne Erfolg.
Eine QList<int> und eine QList<QString> und du probierst es mit qDeleteAll? Das kann nur schief gehen.
Und um dir wirklich helfen zu können brauchen wir Code, und zwar so viel, dass wir dein Problem nachvollziehen können.
Dafür sollte es kompilierbar sein und dein Problem aufweisen.
Re: Alternative zur Qlist?
Verfasst: 25. April 2012 10:30
von gandalffo
mit Hilfe von top, die Auslastung steigt bis 110% und weiter, dann stürtzt das Programm ab.
sorry, Details vergessen. QList<QSring*> und QList<int*>
Re: Alternative zur Qlist?
Verfasst: 25. April 2012 10:35
von franzf
gandalffo hat geschrieben:sorry, Details vergessen. QList<QSring*> und QList<int*>
Und was reitet dich, hier Zeiger auf int/QString zu nehmen?
Und nein, das reicht so immer noch nicht!
Ansonsten gibt es noch das hier:
https://bugreports.qt-project.org/browse/QTBUG-22037
Re: Alternative zur Qlist?
Verfasst: 25. April 2012 10:47
von gandalffo
Re: Alternative zur Qlist?
Verfasst: 25. April 2012 12:56
von Christian81
Diese Doku redet über Pointer in einer QList. Da aber weder "int" noch "QString" ein Pointer ist ...
und ohne Code können wir eh nichts machen.
Re: Alternative zur Qlist?
Verfasst: 25. April 2012 14:33
von franzf
Er schreibt doch
hier, dass es Pointer sind.
Trotzdem:
* Macht das eigentlich kaum Sinn, außer du kommst aus der Java-Ecke (oder du weißt wirklich GENAU, dass du es brauchst, und davon gehe ich nicht aus)
* Es fehlt Code, ohne dem wir nicht helfen können.
Re: Alternative zur Qlist?
Verfasst: 25. April 2012 18:04
von Christian81
Sorry, habs überlesen. Ist aber auch sehr ungewöhnlich und in nahezu allen Fällen unnötig.
Re: Alternative zur Qlist?
Verfasst: 26. April 2012 11:59
von RHBaum
Generell hat Qt schon nen leichtes Problem mit Ressourcen, aber nicht in der Art, das man es für deine Abstürze direkt verantwortlich machen kann ...
Qt verwendet impliziet sharing, d.h du kannst gar nicht den zeitpunkt bestimmen, wann dein Speicher wirklich freigegeben wird.
Aber genau das wuerde dir bei Deinen Listen den Arsch retten ^^
QList<QString> (ohne Pointer) ist deswegen einigermassen performant ....
Die alternative:
std::list<std::string> (bei ner STL impl ohne implizietes sharing, was IMHo die meisten haben) bekommst du von der performance her ne Katastrophe
aber dafuer genau(er) definiertes Verhalten
Die Speicherauslastung von TOP ist deswegen auch ned wirklich aussagefaehig, und krankt sowieso schon am prinzip ^^
Selbst mit extensiver nutztung der STL/Boost oder ähnlichen, wird speicher nicht sofort wieder freigegeben, dank eigener Speichermanager der Libs, bzw der c++ runtime.
Das du irgendwo deinen Speicher zumuellst ist trotzdem wahrscheinlich .... nur wirst mit top und co kaum anhaltspunkte finden wo genau.
Da helfen andere Tools weiter (profiler, speicheranylse tools fuer deinen compiler valgrind z.b. )
willst du 100% performance, bei so wenig wie möglicher Speicherauslastung wirst du etwas tiefer in die Trickkiste greifen muessen, als wie container in container ...
Aber da sind alle anforderungen zu auch relevant, so das wir ohne die kaum tips geben könnten ...
Aber ich denke dein erster ansatzpunkt sollte es sein die "unnötigen" news rauszubekommen ...
bei der qt ist ein :
QString strX = stry; /// (cow hier wird wahrscheinlich auch nur ein Zeiger neu zugewiesen ... )
nur geringfügig(sprich: vernachlaessigbar) imperformantier
als ein
QString * px = py;
Ciao ...