"Gesunde" Stackframe Größe?
-
Hallo,
ich schreibe z.Z. in C ein Programm in dem folgende Zeile vorkommt:char pkg[4+con->blksize];
con->blksize ist ein Wert den der User beeinflussen kann und pkg wird innerhalb einer Funktion auf dem Stack reserviert.
Allerdings ist jetzt als größter Wert etwas um die 65000 vorgesehen, und ca. 65kb auf dem Stack zu reservieren erscheint mir etwas gewagt.
Ich wollte generell mal fragen ab welchen Größen es besser ist malloc etc. zu benutzen um den Speicher zu reservieren. Oder ist gar ab 65.000 Bytes noch garnicht mit Problemen zu rechnen?
Meine Idee war jetzt nämlich eine Abfrage zu machen, in der Art "Wenn Blockgröße kleiner als 1024, reserviere auf dem Stack, wenn größer auf dem Heap", die Frage ist jetzt welcher Wert sinnvoll wäre, da ich malloc eigentlich nur benutzen möchte wenn es nicht anders geht, aus Performance- und Verwaltungsgründen.
-
Herr jth schrieb:
Meine Idee war jetzt nämlich eine Abfrage zu machen, in der Art "Wenn Blockgröße kleiner als 1024, reserviere auf dem Stack, wenn größer auf dem Heap", die Frage ist jetzt welcher Wert sinnvoll wäre, da ich malloc eigentlich nur benutzen möchte wenn es nicht anders geht, aus Performance- und Verwaltungsgründen.
Hallo,
dein Streben nach Performance in allen Ehren, aber bist du dir sicher, auch am richtigem Punkt anzusetzen? Du misst doch hoffentlich den Leistungsgewinn auch wirklich nach.
-
GNU-Fan schrieb:
Herr jth schrieb:
Meine Idee war jetzt nämlich eine Abfrage zu machen, in der Art "Wenn Blockgröße kleiner als 1024, reserviere auf dem Stack, wenn größer auf dem Heap", die Frage ist jetzt welcher Wert sinnvoll wäre, da ich malloc eigentlich nur benutzen möchte wenn es nicht anders geht, aus Performance- und Verwaltungsgründen.
Hallo,
dein Streben nach Performance in allen Ehren, aber bist du dir sicher, auch am richtigem Punkt anzusetzen? Du misst doch hoffentlich den Leistungsgewinn auch wirklich nach.
Hi,
zugegeben, ich messe z.Z. nur etwas esoterisch mit time nach und mittle das über 5 Aufrufe. Prinzipiell hast du recht, zumal diese Funktion nur 1x pro Dateitransfer aufgerufen wird, d.h. eher selten.
Aber generell finde ich die Frage nicht ganz uninteressant, gerade wenn man eine Funktion hätte die öfters z.B. in einer Schleife aufgerufen wird. Den Speicher einfach auf dem Stack zu reservieren ist wesentlich weniger Verwaltungsaufwand für den Kernel und man hat hinterher auch kein Problem mit vergessenen free()s, da automatisch freigegeben wird sobald die Funktion wieder verlassen wird.
Die Frage für mich ist jetzt in welchem Rahmen man das noch machen kann ohne den Stack zu sprengen, ob es da auf Linux oder *BSD irgendwelche festen Werte gibt wie groß der Stackframe sein darf etc.