Wie groß darf der Stack einer Funktion sein?

Asturio

Asturio

Asturio Kee
Hallo Zusammen,

hier habe ich wieder eine sehr spezielle Frage, die kommt eigentlich aus Solaris, aber lässt sich auch gut auf Linux umsetzen. Also:

  • Ich habe eine C Funktion
  • In der Funktion habe ich einen struct als lokaler Varible
  • Diese Variable ist allein schon ca. 2 Mb Groß (die enthält lauter Arrays und so)

Mit einem so grossen lokalen Speicherverbrauch frage ich mich:

Wie groß dürfen eigentlich alle Lokalen Variablen in einer Funktion zusammen sein? Soll ich mir Sorgen machen, wenn eine Funktion eine so grosse Variable braucht?

Und auch, ob es sehr riskant ist ein paar Mal von diese Funktionen gleichzeitig aufzurufen (ich meine hier, dass diese Funktion andere Funktionen aufruft, die auch so eine Variable haben). Ein paar Mal heißt hier vielleicht 10.

Ich weiß, man kann das allgemein mit mallocs und frees umgehen, aber ich würde trotzdem gerne das als Lokale Variablen belassen.

Hatte jemand eine Antwort, oder zu mindest ein Vorschlag, wie man sowas testen kann?

Grüße
 
Also Testen ist ja ganz einfach: Einfach ausführen.
Wenn der Stack nicht langt dann merkst du das schon.

Aber bei einer _so_ großen Variable, welche dann auch noch so häuftig auftritt würde ich mir allein schon aus Performancegründen eine andere Lösung überlegen.
 
normalerweise sollte es kein problem geben, denn da sollte sich das speichermanagement des BS drum kümmern - vorausgesetzt du hast den speicher richtig allociert.

wie hehejo schon gesagt hat: die performance wird halt drunter leiden wenn der arbeitsspeicher ausgelagert werden muss
 
Na ja, ich allociere eben nichts... es sind alle Lokale Variablen.
Das einzige, was ich weiß, ist das der Stack (für Funktionen und Variablen in Funktionen) von oben nach unten wächst, und der Heap (für allocierte Speicher) von unten nach oben wächst. Beide Segmente treffen sich in der Mitte dann irgendwann. Ich habe noch nie einen "Stack Overflow" unter Linux produzieren können, und weiß auch nicht ob es so einen Fehler in C gibt.

Ich werde vermutlich mir mehrere Funktionen testen müssen... Mal schauen was ich herausfinden kann.
 
tja ich wuerde sagen waenns nicht mehr geht wird dich linux schon drauf hinweisen *gg*
 

Ähnliche Themen

Server-Monitoring mit RRDTool

Zurück
Oben