Seite 1 von 1
Maximale Größe von QByteArray
Verfasst: 28. März 2006 18:42
von john_Ohlsen
Hallo,
ich habe ein Problem mit der Anzahl von Bytes, die ich in
QByteArray übergeben möchte. Die Anzahl beträgt 146915328 ! (= 140 MB).
Code: Alles auswählen
QByteArray bValue;
int i = 146915328;
if (bValue.resize(i)== false)
{
QString msg = QString("Memory allocation failed. Tried to allocate %1 bytes.").arg(i);
THROW_EXCEPTION(Exceptions::MemoryException, msg);
}
Ich verwende Qt 3.3. und kann leider nicht auf 4.x umsteigen.
Für Hilfe bin ich sehr dankbar.
Gruss
Thomas
Verfasst: 28. März 2006 19:38
von BartSimpson
Laut Doku(Qt4) liefert resize void zurück.
Verfasst: 28. März 2006 23:31
von upsala
BartSimpson: In Qt3 liefert resize bool zurück
john_Ohlsen: Es ist nicht ganz klar, wo dein eigentliches Problem liegt
Verfasst: 30. März 2006 14:24
von john_Ohlsen
Hallo,
das Problem ist, dass mir Qt3-resize() bei einer anspruchsvollen Applikation ein
false und bei einer kleinen Konsolenanwendung ein
true zurückliefert.
Mit folgenden Qt4-Konstrukt klappt es übrigens:
Code: Alles auswählen
QByteArray bValue;
int i = 146915328;
//call reserve before resize for many raw data bytes
bValue.clear();
bValue.reserve(i);
if (bValue.resize(i)== false)
{
QString msg = QString("Memory allocation failed. Tried to allocate %1 bytes.").arg(i);
THROW_EXCEPTION(Exceptions::MemoryException, msg);
}
Aber wie gesagt, ich muss Qt3 benutzen.
Hat jemand eine Idee, wie ich reserve() unter Qt3 abbilden kann?
Eine andere Frage von mir: Gibt es eine obere Grenze für die Anzahl von Bytes, die ich in das QByteArray reinstecke darf?
Verfasst: 30. März 2006 14:43
von BartSimpson
Das hängt von der Platform ab.
sizeof(uint) dann weiste wieviel rein passt.
Warum es in deinem kleinen Programm und im großen geht dürfe auch leicht gerklärt sein. Es kommt darauf an, wo du das Array anlegen willst.
Versuche es mal mit new.
Verfasst: 31. März 2006 12:52
von john_Ohlsen
Hallo,
das Problem ist gelöst. Speicherallokierung (z.B. resize genauso wie new) bedeutet, man bekommt so viel Speicher wie im virtuellem Adressraum vorhanden ist. Und Windows besitzt entweder 2GB oder 3GB. Schließlich nahm die anspruchvolle Applikation so gut wie 2GB weg und es blieb für die 140 MB-Allokierung nicht mehr viel übrig.
Meine Fragen sind geklärt:
Frage:Gibt es eine obere Grenze für die Anzahl von Bytes, die ich in das QByteArray reinstecke darf?
Antwort: So viel wie im virtuellem Adressraum noch übrig ist. Theoretisch maximal 4 GB = 2^32 = max-Wert vom unit.
Frage:Hat jemand eine Idee, wie ich reserve() unter Qt3 abbilden kann?
Antwort: Keine Ahnung. Ist mir auch egal.
Gruss