[geklärt] Maximale Puffergröße bestimmen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

[geklärt] Maximale Puffergröße bestimmen

Beitrag von Scotty »

Ich habe eine Konstante mit 1MB definiert, die ich zum Auslesen von Daten nutze. Das klappt problemlos unter Linux und Windows, aber Darwin in einer virtuellen Umgebung führt die Funktion gar nicht aus; ein debugln() als erste Anweisung kommt nicht hoch, dafür aber TApplication.HandleException Unknown Run-Time error : 202. Wenn ich die 1MB auf 2048 bytes reduziere klappt alles. Wie kann ich die maximale Größe bestimmen?

Code: Alles auswählen

const
{$ifndef Darwin}
  cBufSize=1024*1024; //1MB
{$else}
  cBufSize=2048;
{$endif}
var
  f: file;
begin
  AssignFile(f, UTF8ToSys(FFileName));
  SetTextBuf(f, aBuffer, cBufSize);
  Reset(f);
 


PS: Ich benutze keine TStringList, weil die eingelesenen Daten geparst und lokal vorgehalten werden müssen, wodurch doppelter Speicherbedarf entstünde.
Zuletzt geändert von Scotty am Fr 13. Feb 2015, 14:41, insgesamt 1-mal geändert.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Maximale Puffergröße bestimmen

Beitrag von Scotty »

http://www.freepascal.org/docs-html/rtl ... xtbuf.html
"The maximum size of the newly assigned buffer is 65355 bytes."

Die Frage ist also eher, warum das überhaupt mit größeren Werten funktioniert hat.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: [geklärt] Maximale Puffergröße bestimmen

Beitrag von marcov »

Ich habe mich die Quellen angesehen, und sehe keinen expliziter Begrenzung, sonst die Große des Typs. (16-bit auf 16-bit, 32-bit auf 32-bit, ??? auf 64-bit).

Also Dokumentation ist vielleicht falsch.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: [geklärt] Maximale Puffergröße bestimmen

Beitrag von Scotty »

marcov hat geschrieben:16-bit auf 16-bit, 32-bit auf 32-bit, ??? auf 64-bit

Das klingt zwar vernünftig, aber bei mir gab es in einer vmware den runtime error 202 bei 64bit (oder 32 aber sicher nicht 16). Mit einer Puffergröße von 2^16 klappt es jetzt einwandfrei. Und ich habe Fehlermeldungen von Anwendern bekommen, die auch diese Ursache haben könnten.

marcov
Beiträge: 1100
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: [geklärt] Maximale Puffergröße bestimmen

Beitrag von marcov »

Wenn bekommt man ein Runtime Error? Beispiel Kode?

2^16 ist schon großer als die in Dokumentation erwähnte maximaler Puffergröße.

P.s. Ich habe aber nie viel messbare Beschleunigung gesehen mit Puffergröße über 8-16kb

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: [geklärt] Maximale Puffergröße bestimmen

Beitrag von Scotty »

marcov hat geschrieben:Wenn bekommt man ein Runtime Error?

Der Fehler kam bei Aufruf der Funktion, noch bevor die erste Zeile ausgeführt wurde. Wenn ich jetzt ein Minimalbeispiel konstruiere, dann klappt es auch mit einem größeren Puffer. Also muss mein Problem wohl eine andere Ursache gehabt haben.

Antworten