![]() |
Frage zu Strings
Hallo!
Wenn ich einen String verwende, wieviel Speicher benötigt der? Oder ist er Dynamisch? Wenn ja, wieviel Speicher benötigt er mindestens? Ich möchte Reale zahlen speichern, also mit Nachkommastellen, aber dafür so wenig speicher wie möglich brauchen. Real benötigt halt 48b und das ist mir zuviel (es handelt sich um bis zu 5mio Speichersätze) |
Re: Frage zu Strings
Hallo,
ein String benötigt pro Zeichen 1 Byte und ein Byte für die Längenangabe. Also mindestens 2 Byte maximal .... Aber Deine Datenmenge, so groß ist die doch nicht. 48 Byte * 5 000 000 /1024 = 234375 KByte Grüße Klaus |
Re: Frage zu Strings
Die Datenmenge geht schon, aber bei der Verarbeitung werden nochmals einige Daten erzeugt, was dazu führen kann das die Datenmenge die 1GB grenze schnell überschreitet....
Danke für die schnelle Antwort!!! |
Re: Frage zu Strings
Zitat:
|
Re: Frage zu Strings
ein real braucht doch keine 48 Byte sondern 48 Bit = 6 Byte
und ein String (zumindest ein "normaler" Delphi string) braucht noch mehr zb.: wird da pro String ein 4Byte Counter mitgeführt (und die Länge ist auch sicher eher 4 Byte groß) |
Re: Frage zu Strings
Zitat:
Was sind schon ein paar Megabyte. Wenn du sie brauchst, dann brauchst du sie halt. Da jeder String einzeln alloziiert ist, duerfte der reale Speicherverbrauch mit mindestens 5 Byte nicht wirklich besser sein. |
Re: Frage zu Strings
Aber:
Wenn du real-Größen zum Speichern und zum Lesen immer wieder in Zahlen (Ziffern) umwandelst, kann das bei häufigem R/W und großen Datenmengen empfindlich in die Rechenzeit gehen ! Außerdem braucht eine real-Größe nur 4-6-8 Byte. Da bist du mit der Zifferdarstellung schnell drüberhinaus. Klaus-Peter |
Re: Frage zu Strings
Die Zahlen haben maximal 3 Vorkomma und 2 Nachkomma Stellen...
Ich dachte Real benötigt 48b? |
Re: Frage zu Strings
Dann wäre der String ja schon größer.
|
Re: Frage zu Strings
Ups, Stimmt ja....
|
Re: Frage zu Strings
Inzwischen sollte klar sein, dass deine Messwerte als Strings immer mehr Platz benötigen, als ein binärer Datentyp wie Single, Real oder Double.
Jetzt kommt es noch auf den Wertebereich und die Genauigkeit an. Man könnte mit einem Festkommaformat viel an Platz und Gewschwindigkeit verbessern. Angenommen, du bräuchtest nur eine Nachkommastelle. Das entspräche (aufgerundet )4 Bit. Ein Integer mit 27 Bit+(1Bit Vorzeichen) für die Vorkomma und 4 Bit für die Nachkommastellen wäre dann sehr effizient. |
Re: Frage zu Strings
Warum nimmst Du denn dann keinen Single?
Müsste doch reichen für Deine Zwecke...
Code:
Typ Bereich Signifikante Stellen Größe in Byte
Real48 -2,9 x 10^39 .. 1,7 x 10^38 11-12 6 Single -1,5 x 10^45 .. 3,4 x 10^38 7-8 4 Double -5,0 x 10^324 .. 1,7 x 10^308 15-16 8 Extended -3,6 x 10^4951 .. 1,1 x 10^4932 10-20 10 Comp -2^63+1 .. 2^63 1 10-20 8 |
Re: Frage zu Strings
Zitat:
Zum Umwandeln in Real kannst du dir dann etwa solche Funktionen basteln:
Delphi-Quellcode:
Die Speicherung deiner Datensätze als Integer dürfte ziemlich effizient sein, ein Integer benötigt nur 4 Byte.
function RealToMeinFormat(const Value: Real): Integer;
begin Result := Trunc(Value * 100); end; function MeinFormatToReal(const Value: Integer): Real; begin Result := (Value div 100) + (Value mod 100) / 100; end; //Nachtrag: @RavenIV: Single ist ziemlich ungenau bei einer festen Anzahl an Nachkommastellen. Er hat 2 Nachkommastellen bei seinen Daten und das wird bei Single schnell ungenau. Beispiel: 1,73 wird bei Single zu 1,73000001907349. Deswegen würde ich ein Integer bevorzugen, hier kann es keine Rundengsfehler geben und benötigt genauso viel Speicherplatz wie ein Single. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz