Seite 1 von 1

sehr großer QVector

Verfasst: 31. Oktober 2007 15:28
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

Verfasst: 31. Oktober 2007 15:50
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.

Verfasst: 31. Oktober 2007 23:02
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)

Verfasst: 31. Oktober 2007 23:12
von upsala
Und eine QList geht nicht?

Verfasst: 1. November 2007 12:04
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?

Verfasst: 1. November 2007 12:21
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.

Verfasst: 1. November 2007 13:36
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 :/

Verfasst: 1. November 2007 13:40
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()