Hallo Flo,
Welchen Grund kann es haben, dass nicht BUFSIZ genutzt wird, das ja m.W. die für ein Betriebssystem optimale Puffergröße sein sollte?
BUFSIZ ist die Größe von stdio.h-Puffern, es steht nirgends geschrieben, dass die optimal sein muss...
Außerdem: Eine Konstante kann sowieso *nie* die optimale Puffergröße sein: Zum einen ist die praktisch gar nicht betriebssystemabhängig. Zum anderen hängt sie von Faktoren ab, die zur Compilezeit gar nicht bekannt sein können:
* Verwendete Hardware
Wenn man z.B. von DVD liest, braucht man eine völlig andere
Puffergröße als wenn man von Festplatte liest. Und die optimale
Puffergröße von Festplatten hängt vom Anschlusstyp, von der
Geschwindigkeit der Festplatte, von der Sektorgröße, etc. ab
(und das auf nichttriviale Weise).
* Verwendetes Dateisystem (sowohl Typ als auch konkrete Parameter)
Je nachdem, welches Dateisystem man einsetzt und welche Parameter
eingestellt sind ist die beste Puffergröße auch unterschiedlich.
* Verwendungszweck in der Applikation
Wenn die Applikation nur kleine Dateien auslesen will, ist ein
kleinerer Puffer besser geeignet, sonst müssen nämlich immer relativ
große Speicherbereiche für die Puffer alloziert werden, die selten
vollständig genutzt werden. Außerdem kann der Speicherverbrauch
unnötig in die Höhe gehen, wenn man zu große Puffer für sehr kleine
Dateien verwendet.
Daher: Eine optimale Puffergröße kann man nicht einfach zur Compilezeit angeben. Viele Programme, bei denen die Puffergröße nenneswert die Performance beeinflusst, bieten daher entweder eine Option an, sie zu ändern (das Programm dd z.B.) oder versuchen, die optimale Größe zur Laufzeit zu ermitteln (z.B. indem sie in der Anfangszeit mit einer Defaultpuffergröße anfangen und die leicht variieren, um zum Optimum zu kommen).
Für die meisten Zwecke, für die man PHP einsetzt, sind 8 KiB aber ein guter Kompromiss, ich vermute, deswegen wird diese Zahl verwendet. Die Performanceeinbußen bei PHP liegen in der Regel an anderer Stelle.
Viele Grüße,
Christian
Mein "Weblog" [RSS]
Using XSLT to create JSON output (Saxon-B 9.0 for Java)
»I don't believe you can call yourself a web developer until you've built an app that uses hyperlinks for deletion and have all your data deleted by a search bot.«
-- Kommentar bei TDWTF