Maximale Größe von QByteArray

Alles rund um die Programmierung mit Qt
Antworten
john_Ohlsen
Beiträge: 13
Registriert: 19. Januar 2006 16:57
Wohnort: München

Maximale Größe von QByteArray

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Laut Doku(Qt4) liefert resize void zurück.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

BartSimpson: In Qt3 liefert resize bool zurück

john_Ohlsen: Es ist nicht ganz klar, wo dein eigentliches Problem liegt
john_Ohlsen
Beiträge: 13
Registriert: 19. Januar 2006 16:57
Wohnort: München

Beitrag 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?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
john_Ohlsen
Beiträge: 13
Registriert: 19. Januar 2006 16:57
Wohnort: München

Beitrag 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
Antworten