sehr großer QVector

Alles rund um die Programmierung mit Qt
Antworten
butze
Beiträge: 39
Registriert: 7. Mai 2007 23:01

sehr großer QVector

Beitrag von butze »

hi!

möchte einen QVector vor dem Füllen mit einer möglichst großen Größe erzeugen.

vector = new QVector<double>;
vector->reserve(1000000); /1 Mill

geht.

Versuche ich es mit 10Mill stürzt das Programm beim "reserve" ab.


Woran könnte das liegen? Habe in den docs nichts über eine Größenbeschränkung finden können. An einem integer Überlauf dürfte es acuh nicht liegen...

Gruß

Martin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Bei 10 Millionen schon? Naja kann sein
--> 10Milltionen * sizeof(double) ~= 80MB an einem Stück im RAM. Wenn dein Ram stark fragmentiert ist wird das ggf. nichts.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
butze
Beiträge: 39
Registriert: 7. Mai 2007 23:01

Beitrag von butze »

hmm das seh ich ein. Gibt da irgendeine Möglichkeit den Vector dennoch irgendwie auf eine solche Größe zu bekommen?

oder muss ich zwingend ne andere Datenstruktur wählen? (ist mir nicht so lieb, weil die werte noch geplotet werden sollen und das plot tool nur arrays akzeptiert)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und eine QList geht nicht?
butze
Beiträge: 39
Registriert: 7. Mai 2007 23:01

Beitrag von butze »

für das projekt wird momentan noch qwt verwendet.
QWT schluckt leider nur Arrays. Von daher fällt die Lösung mit der Liste raus.

evtl. könnte ich einen Vector nehmen, in dem wiederum Pointer auf Listen mit 100 Einträgen gespeichert sind.
Die benötigte Größe des Vectors wird dann um Faktor 100 verkleinert.

Wenn ich jetzt aber plotten möchte müsste ich jedes mal die Werte (Ausschnitte sollten reichen) wieder in ein neues Array schreiben.


ist ne komplexe Lösung und die Laufzeit wird auch nicht so toll werden...

gibts noch andere Möglichkeiten?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

butze hat geschrieben: gibts noch andere Möglichkeiten?
Ja, herausfinden warum bei Dir bei 80MB schon Schluss ist. Ggf. Ram aufrüsten und/oder aktuelle Qt-Version testen (vielleicht ist ja doch ein Bug drin). Wie gesagt - bei mir ging es bis 1.5GB problemlos.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
butze
Beiträge: 39
Registriert: 7. Mai 2007 23:01

Beitrag von butze »

am initialisieren liegts aber nicht, oder? habs auf 1GB Ram getestet

.h:
QVector<double>* vector;


.cpp:
vector = new QVector<double>;
vector->reserve(1000000); // == 1 Mill 10Mill geht nicht


..habe noch vergessen zu erwähnen, dass ich mehrere von diesen Vectoren habe. Bis zu 40 Stück! Aber auch beim ersten initialisieren schmiert er ab :/
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich hab es ohne new probiert (ist ja in diesem Falle ja mehr oder weniger sinnlos), aber sonst ... probiere mal resize() anstatt reserve()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten